如何在C#中向DataTable添加数据

问题描述 投票:0回答:1

在我的解决方案中,我创建两个列表

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);运行低谷并查看RowsDataTable属性我可以看到每次迭代的计数增量。然而,ListRowsDataTable属性仍然是零值。

现在有例外但没有抱怨,但是在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包含值?

c# datatable datagrid wpfdatagrid
1个回答
0
投票

如果您遵循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作为数据源,但我认为这无关紧要。

© www.soinside.com 2019 - 2024. All rights reserved.