DataTable.Columns [0] .Container返回null

时间:2013-08-07 20:47:35

标签: c# data-binding

我正在尝试将DataGridViewComboBoxColumn object绑定到绑定到DataTable的{​​{1}}中的列。此列将放入单独的DataGridView。这是发生这种情况的代码部分:

DataGridView
无论materialTable的填充方式如何,

//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; 都会返回null。其他方法(如materialTable.Columns[0].Container;)按预期工作。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:0)

阅读文档:

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

物业价值   键入:System.ComponentModel.IContainer   实现IContainer接口的对象,表示组件的容器,如果组件没有站点, null

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

答案 1 :(得分: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类来加载数据,但这是另一个问题