问题描述
|
哪种数据可视化控件用于在LINQPad中呈现结果?还是有其他方法可以显示.NET中的分层数据?
解决方法
LINQPad使用WebBrowser控件显示动态生成的HTML页面。您甚至可以通过右键单击结果窗口来查看其源代码。因此,它基本上是Internet Explorer的包装。就HTML的生成而言,它使用定制的XhtmlFormatter来访问对象图并发出基于XDocument的XHTML。
, LINQPad也可以调用Windows窗体随附的所有旧的Dundas图表控件。只需转储任何Bitmap对象,LINQPad就会在HTML中忠实地显示它。尝试以下操作,确保F4参考中有have0ѭ,
System.Windows.Forms
和System.Windows.Forms.DataVisualization
,然后粘贴并按F5。它也可以与为IronPython量身定制的高级SHO图表配合使用,但可以在C#中很好地工作。
// Almost the smallest meaningful example of Charting
void Main()
{
// Chart must have a chart area,but it\'s not externally referenced later
var chartArea1 = new ChartArea();
var chart1 = new Chart();
chart1.ChartAreas.Add(chartArea1);
var series1 = new Series();
// The following goes beyond the minimal,but just a little. You can delete these two lines.
// Fun to set the series ChartType; default is column chart
series1.ChartType = SeriesChartType.Pie;
series1.CustomProperties = \"LabelsRadialLineSize=1,PieDrawingStyle=Concave,LabelStyle=outside\";
var r = new Random(Guid.NewGuid().GetHashCode());
var ys = Enumerable.Range(0,5).Select (e => r.NextDouble()).Dump(\"Doubles\");
var xs = Enumerable.Range(0,5).Select (e => GetRandomString(3).ToUpper()).Dump(\"Strings\");
series1.Points.DataBindXY(xs.ToArray(),ys.ToArray());
chart1.Series.Add(series1);
var b = new Bitmap(width: chart1.Width,height: chart1.Height);
chart1.DrawToBitmap(b,chart1.Bounds);
b.Dump();
var frm = new Form();
// Seems 300 x 300 is the default chart-area size and chart size,so set the form to hold it
frm.ClientSize = new Size(width: 300,height: 300);
frm.Controls.Add(chart1);
Application.Run(frm);
}
static IEnumerable<string> CharRange(Char c,int length)
{
return (from e in Enumerable.Range(Convert.ToInt32(c),length)
select Char.ConvertFromUtf32(e));
}
static string GetRandomString(int length)
{
var sb = new StringBuilder();
do
sb.Append(Path.GetRandomFileName().Replace(\".\",\"\").Substring(0,length < 11 ? length : 11));
while ((length -= 11) > 0);
return sb.ToString();
}