Привязка ультрачарта инфраструктуры (линейной диаграммы) к DataView

#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();
    }