簡體   English   中英

如何在C#中向DataTable添加數據

[英]How to add data to a DataTable in C#

在我的解決方案中,我創建兩個列表

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

調試代碼我可以看到newRow的ItemArray在迭代期間包含正確的數據,所有值都是string類型。 ItemArray中的一些列包含空字符串,但我無法想象這就是問題所在。

_selectedFeaturesDataTable.Rows.Add(newRow); 運行槽並查看DataTableRows屬性我可以看到每次迭代的計數增量。 但是, DataTable RowsList屬性仍然為null。

現在有例外但沒有抱怨,但是數據在DataTable找不到,而列從列表中接收值。 此外,UI中的組件甚至不顯示列名稱。

最后,這是我在xaml中定義DataGrid的方式以及我用於綁定的屬性。

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包含值?

如果您遵循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作為數據源,但我認為這無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM