0

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

//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.Columns[0].Container;无论 materialTable 的填充程度如何,都返回 null。其他方法,例如materialTable.Rows[0]["Material"].ToString()按预期工作。我怎样才能让它工作?

4

2 回答 2

0

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 类来加载您的数据,但这是另一个问题

于 2013-08-07T21:03:49.197 回答
0

阅读文档:

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

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

这是一个虚拟属性,继承自基类。对 a 来说没有意义DataTable。它几乎肯定不是您想要使用的属性。

于 2013-08-07T20:57:53.710 回答