#.net #linq #linqpad
#.net #linq #linqpad
Вопрос:
Какой элемент управления визуализацией данных используется для представления результатов в LINQPad? Или есть какая-либо альтернатива для отображения иерархических данных в .NET?
Ответ №1:
LINQPad использует элемент управления WebBrowser для отображения динамически сгенерированной HTML-страницы. Вы даже можете просмотреть его исходный код, щелкнув правой кнопкой мыши на окне результатов. Таким образом, это в основном оболочка Internet Explorer. Что касается генерации HTML, то он использует специально созданный XhtmlFormatter для просмотра графика объектов и выдачи XHTML на основе XDocument.
Ответ №2:
LINQPad также может вызывать все старые элементы управления диаграммами Dundas, которые поставляются с Windows Forms. Просто сбросьте любой растровый объект, и LINQPad послушно отобразит его в HTML. Попробуйте следующее, убедившись, что у вас есть System.Drawing
, System.Windows.Forms
и System.Windows.Forms.DataVisualization
в ваших F4 ссылках, вставьте и нажмите F5. Он также работает с высокоуровневыми диаграммами SHO, которые были адаптированы для IronPython, но отлично работают с 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();
}