Welche Datenvisualisierungssteuerung wird verwendet, um die Ergebnisse in LINQPad ? Oder gibt es eine Alternative für die Anzeige hierarchischer Daten in .NET?
Antworten
Zu viele Anzeigen?LINQPad verwendet eine WebBrowser Steuerelement, um eine dynamisch generierte HTML-Seite anzuzeigen. Sie können sogar den Quellcode anzeigen, indem Sie mit der rechten Maustaste auf das Ergebnisfenster klicken. Es ist also im Grunde ein Wrapper für den Internet Explorer. Was die Generierung des HTML betrifft, so verwendet es einen speziell entwickelten XhtmlFormatter, um den Objektgraphen zu besuchen und XHTML auf der Grundlage von XDocument zu emittieren.
LINQPad kann auch alle alten Dundas Charting-Steuerungen die mit Windows Forms geliefert werden. Geben Sie einfach ein beliebiges Bitmap-Objekt ein und LINQPad zeigt es pflichtbewusst im HTML an. Probieren Sie das Folgende aus und stellen Sie sicher, dass Sie System.Drawing
, System.Windows.Forms
y System.Windows.Forms.DataVisualization
, in Ihrem F4 Referenzen, einfügen und drücken F5 . Es funktioniert auch mit den übergeordneten SHO-Tabellen, die für folgende Zwecke entwickelt wurden IronPython , funktionieren aber hervorragend mit 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();
}