DataTable.Columns[0].容器返回null

本文关键字:返回 null Columns DataTable | 更新日期: 2023-09-27 18:26:51

我正在尝试将DataGridViewComboBoxColumn object绑定到绑定到DataGridViewDataTable中的列。此列将被放置在一个单独的DataGridView中。这是发生这种情况的代码部分:

//Create material datatable
materialTable = new DataTable();
materialTable.Columns.Add("Material", typeof(string));
dataGridViewMaterials.DataSource = materialTable;
//Create material combobox column
materialColumn = new DataGridViewComboBoxColumn();
materialColumn.DataPropertyName = "Material";
materialColumn.Name = "Material";
materialColumn.DataSource = materialTable.Columns[0].Container;

无论materialTable如何填充,materialTable.Columns[0].Container;都返回null。其他方法(如materialTable.Rows[0]["Material"].ToString())也可以正常工作。我怎样才能让它发挥作用?

DataTable.Columns[0].容器返回null

Columns集合表示数据表(AKA模式)的组成结构。它不包含任何数据。包含数据的是DataTable本身及其Rows集合。在你的情况下,你应该简单地写

//Create material combobox column
materialColumn = new DataGridViewComboBoxColumn();
materialColumn.DataPropertyName = "Material";
materialColumn.Name = "Material";
materialColumn.DataSource = materialTable;

当然,在组合框中出现任何内容之前,您的DataTable应该加载一些数据
例如,您可以添加

materialTable = new DataTable();
materialTable.Columns.Add("Material", typeof(string));
DataRow row = materialTable.NewRow();
row[0] = "First item";
materialTable.Rows.Add(row);

或者您使用特定的Sql类来加载数据,但这是另一个问题

阅读文档:

[BrowsableAttribute(false)]
public virtual IContainer Container { get; }

财产价值类型:System.ComponentModel.IContainer实现表示组件容器的IContainer接口的对象,如果组件没有站点,则为null。

这是一个从基类继承的虚拟属性。这对DataTable来说没有意义。几乎可以肯定,这不是你想要使用的房产。