#c# #data-binding #infragistics #dataview
#c# #привязка данных #инфраструктура #dataview
Вопрос:
Я пытаюсь привязать DataView к NumericTimeSeries через его экземпляр NumericTimeSeriesDataAppearance, но в конечном итоге в серии будет ноль точек. Я тестирую, используя следующий код:
DataTable table = new DataTable();
table.Columns.Add("date", typeof(DateTime));
table.Columns.Add("value", typeof(double));
DataView view = new DataView(table);
view.AllowDelete = true;
view.AllowNew = true;
view.AllowEdit = true;
NumericTimeSeries series = new NumericTimeSeries();
series.Data.TimeValueColumn = "date";
series.Data.ValueColumn = "value";
series.Data.DataSource = view;
series.DataBind();
// Update series when data is changed
view.ListChanged = (sender, args) => series.DataBind();
table.RowChanged = (sender, args) => series.DataBind();
table.TableNewRow = (sender, args) => series.DataBind();
table.RowDeleted = (sender, args) => series.DataBind();
table.Rows.Add(DateTime.Now, 42.0);
System.Console.WriteLine("Number of datapoints in view is {0}", view.Count);
System.Console.WriteLine("Number of datapoints in series is {0}", series.Points.Count);
Это выводит 1 точку данных для представления, но 0 для ряда. Привязка непосредственно к DataTable работает нормально, но для моей проблемы этого недостаточно (я использую DataView для сортировки DataTable по дате).
Ответ №1:
В итоге я использовал триггер для событий, подлежащих обработке данными.RowChanged, TableNewRow и RowDeleted обновляют числовые временные ряды:
public void BindSortedViewToSeries(DataTable unsortedTable, DataView sortedView, NumericTimeSeries series)
{
unsortedTable.RowChanged = (sender, args) => MirrorDataView(sortedView, series);
unsortedTable.TableNewRow = (sender, args) => MirrorDataView(sortedView, series);
unsortedTable.RowDeleted = (sender, args) => MirrorDataView(sortedView, series);
MirrorDataView(view, series);
}
private static void MirrorDataView(DataView view, NumericTimeSeries series)
{
series.Data.DataSource = view.ToTable();
series.DataBind();
}