【发布时间】:2013-11-27 06:26:33
【问题描述】:
在 Windows 窗体中实现级联 ComboBox 时卡住了。我有一个DataSet 和一些DataTable。现在,我有一个 DataGridView 控件,它将有两个 ComboBox :
- 一个
ComboBox将显示所有DataTable名称 - 另一个将填充所选
DataTable的列名
问题是级联无法正常工作。完整代码如下:
DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ds.Tables.Add(GetTable1());
ds.Tables.Add(GetTable2());
IList<string> lstTables = ds.Tables.OfType<DataTable>().Select(dt => dt.TableName).ToList();
dgvColumn1.DataSource = lstTables;
dgvColumn1.ValueType = typeof(string);
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if ((dataGridView1.CurrentCell != null)
&& (dataGridView1.CurrentCell.ColumnIndex == 0))
{
DataGridViewComboBoxColumn cboColumn = (DataGridViewComboBoxColumn)dataGridView1.Columns[1];
if (ds.Tables[dataGridView1.CurrentCell.FormattedValue.ToString()].Columns.Count >0)
{
IList<string> lstColumn = ds.Tables[dataGridView1.CurrentCell.FormattedValue.ToString()].Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToList();
cboColumn.DataSource = lstColumn;
cboColumn.ValueType = typeof(string);
}
else
{
cboColumn.DataSource = null;
}
}
}
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
}
DataTable GetTable1()
{
DataTable dt1 = new DataTable("table1");
dt1.Columns.Add("t1Col1");
dt1.Columns.Add("t1Col2");
dt1.Columns.Add("t1Col3");
dt1.Columns.Add("t1Col4");
return dt1;
}
DataTable GetTable2()
{
DataTable dt2 = new DataTable("table2");
dt2.Columns.Add("t2Col1");
dt2.Columns.Add("t2Col2");
dt2.Columns.Add("t2Col3");
dt2.Columns.Add("t2Col4");
return dt2;
}
【问题讨论】:
标签: c# winforms datagridview combobox