1
我有一个从DataGridView继承的自定义控件。它通过一些附加功能(其导出每个单元的内容)来增强控制。我想使用此功能,但不需要网格本身的用户界面。数据绑定不在Form.Controls集合中的DataGridView控件?
因此,我创建了自定义控件的实例,将DataSource属性设置为DataTable的实例,并且在网格中没有列。我的数据表具有列(和行),AutoGenerateColumns为true,但没有列出现在网格“Columns”集合中。自定义控件在此处变得无关紧要,因为DataGridView控件的功能相同。
如果我将网格添加到窗体的“控件”集合,数据绑定工作,网格有我的列。
这是为什么?
public Form1()
{
InitializeComponent();
DataTable dataTable = new DataTable() { TableName = "Bob" };
dataTable.Columns.Add("One",typeof(String));
dataTable.Columns.Add("Two", typeof(String));
dataTable.Columns.Add("Three", typeof(String));
dataTable.Rows.Add("a", "b", "c");
dataTable.Rows.Add("d", "e", "f");
dataTable.Rows.Add("g", "h", "i");
DataGridView grid = new DataGridView();
grid.DataSource = dataTable;
int n1 = grid.Columns.Count; // returns zero
this.Controls.Add(grid); // why do I have to do this ?
grid.DataSource = null;
grid.DataSource = dataTable;
int n2 = grid.Columns.Count; // returns three
}
感谢, 罗斯
可能的重复[为什么我必须添加一个DataGridView到一个窗体以获取数据?](http://stackoverflow.com/questions/8256762/why-must-i-add-a-datagridview-to -a-form-in-order-to-the-data) –
是的......它似乎是这个问题的重复。然而,只要阅读grid *的“Handle”属性*(如该帖子的回答中所建议的那样)*似乎不会影响绑定列*(在本例中)*。 –
是的 - 我自己尝试过,不能使它工作。就我个人而言,我会退后一步,重新考虑使用UI组件来处理非UI工作。是否有可能提取您的逻辑来处理数据源而不是单元集合? –