我正在尝试将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;
)按预期工作。我怎样才能让它发挥作用?
答案 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类来加载数据,但这是另一个问题