Как добавить данные в таблицу данных в C # - PullRequest
0 голосов
/ 23 апреля 2019

В моем решении я создаю два списка

var listColumnNames = new List<KeyValuePair<string, string>>();

и

var listValues = new List<List<string>>();

, где я добавляю данные путем перебора входного набора данных. Оба списка построены нормально и содержат ожидаемые данные. Впоследствии я использую два цикла for для добавления данных в DataTable. DataTable создается как private DataTable _selectedFeaturesDataTable = new DataTable(); и позже, в рамках задачи, в которой я создаю и заполняю два списка сверху, я пишу следующее после того, как списки получили все данные:

_selectedFeaturesDataTable = new DataTable();
            foreach (var col in listColumnNames)
            {
                _selectedFeaturesDataTable.Columns.Add(new DataColumn(col.Key, typeof(string)) { Caption = col.Value });
            }
            foreach (var row in listValues)
            {
                var newRow = _selectedFeaturesDataTable.NewRow();
                newRow.ItemArray = row.ToArray();
                _selectedFeaturesDataTable.Rows.Add(newRow);
            }

Отладка кода Я вижу, что ItemArray newRow содержит правильные данные во время итераций, также все значения имеют тип string. Некоторые из столбцов в ItemArray содержат пустые строки, но я не могу себе представить, в чем проблема.

Строка _selectedFeaturesDataTable.Rows.Add(newRow); проходит через корыто и, глядя на свойство Rows DataTable, я вижу приращение счетчиков на каждой итерации. Тем не менее, свойство List для Rows в DataTable все еще имеет значение null.

В настоящее время есть исключения и никаких жалоб, но данные не могут быть найдены в DataTable, в то время как столбцы получают значения из списка. Кроме того, компонент в пользовательском интерфейсе даже не отображает имена столбцов.

Наконец, вот способ определения DataGrid в xaml и свойства, которое я использую для привязки.

1027 * XAML *

<DataGrid x:Name="winDataTable" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" HeadersVisibility="Column"
                      IsReadOnly="True" SelectionMode="Single" AutoGenerateColumns="True"
                      ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"
                      ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                      ItemsSource="{Binding Path=SelectedFeatureDataTable, Mode=OneWay}">

Определение свойства

public DataTable SelectedFeatureDataTable
    {
        get
        {
            return _selectedFeaturesDataTable;
        }
        set
        {
           SetProperty(ref _selectedFeaturesDataTable, value, () => SelectedFeatureDataTable);

        }
    }

Почему данные не добавляются в объект DataTable, даже если ItemArray содержит значения?

1 Ответ

0 голосов
/ 23 апреля 2019

Если вы следуете шаблону MVVM и работаете с ViewModel-Class вместо кода позади, вы можете попробовать следующий подход:

public class yourViewModel : INotifyPropertyChanged

    public DataTable SelectedFeatureDataTable
        {
            get
            {
                return _selectedFeaturesDataTable;
            }
            set
            {
               SetProperty(ref _selectedFeaturesDataTable, value, () => SelectedFeatureDataTable);
               RaisePropertyChanged();
            }
        }

А также, как я знаю, вы можете напрямую связать свой источник данных вxaml как это:

ItemsSource="{Binding SelectedFeatureDataTable, Mode=OneWay}"

Я никогда не связывал dataTable, вместо этого я использую ListCollectionView в качестве источника данных, но я думаю, что это не должно иметь значения.

...