2011-06-17 38 views
1

我有一组数据从另一个DataGridView进入DataGridView(described here, question solved)。将DataSet列类型绑定到DataGridViewColumns?

我现在想两个新列添加到我的数据集,一个整数,一个布尔型DataGridViewNumericUpDownColumn(从this MSDN page感激thieved)的整数列之中,并DataGridViewCheckBoxColumn类型的布尔列之中。

如果我直接添加列到DataSet,我似乎无法指定Integer列的DataGridViewColumn类型。

如果我将DataSet设置为Data GridView的DataSource,然后将这些列添加到DataGridView中,那么这些列将存在,但不会绑定回不包含这些列的DataSet。

如何使用正确的列类型将这两列绑定到DataGridViewColumns?

回答

2

要做到这一点,你需要将DataGridViewAutoGenerateColumns属性设置为false,自己在列添加到DataSetDataGridView两者。 DataGridView列有DataPropertyName属性,它允许您设置绑定到基础DataSource

你可以做的是有AutoGenerateColumns属性设置为true,添加数据集作为数据源的网格(因而得到了大多数你需要的列),然后打开的AutoGenerateColumns关闭,并添加整数和布尔列到数据集和网格。

下面是一些示例代码,针对一个DataTable绑定:

DataTable dataTable = new DataTable(); 

DataColumn col1 = new DataColumn("Id",typeof(int)); 
col1.AutoIncrement = true; 

DataColumn col2 = new DataColumn("Name",typeof(string));  
DataColumn col3 = new DataColumn("TimeStamp",typeof(DateTime)); 

dataTable.Columns.AddRange(new DataColumn[] { col1, col2, col3 }); 

dataTable.Rows.Add(null,"John",DateTime.Now);  
dataTable.Rows.Add(null,"Jane",DateTime.Now);   

BindingSource source = new BindingSource(); 
source.DataSource = dataTable; 
dataGridView1.DataSource = source; 

dataGridView1.AutoGenerateColumns = false; 

DataColumn col4 = new DataColumn("CheckCol", typeof(bool)); 
dataTable.Columns.Add(col4); 

DataGridViewCheckBoxColumn dgvcol1 = new DataGridViewCheckBoxColumn(); 
dgvcol1.DataPropertyName = "CheckCol"; 
dgvcol1.Name = "Select"; 

dataGridView1.Columns.Add(dgvcol1); 

我还没有实现的NumericUpDown列类型,但它应该工作得一样显示的复选框列类型。