如何在C#

时间:2019-04-23 11:10:10

标签: c# datatable datagrid wpfdatagrid

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

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在迭代过程中包含正确的数据,而且所有值均为字符串类型。 ItemArray中的某些列包含空字符串,但我无法想象这是问题所在。

_selectedFeaturesDataTable.Rows.Add(newRow);行经过低谷,看着Rows的{​​{1}}属性,我看到计数在每次迭代中都增加。但是,DataTableList的{​​{1}}属性的值为空。

现在有例外,没有抱怨,但是在Rows中找不到数据,而各列从列表中接收值。 而且,UI中的组件甚至不显示列名。

最后,这是我在xaml中定义DataGrid的方式以及用于绑定的属性。

XAML

DataTable

属性定义

DataTable

为什么即使ItemArray包含值,也没有向DataTable对象添加数据?

1 个答案:

答案 0 :(得分: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作为数据源,但是我认为那没关系。