我有一个包含要导入组合框的表的数据集。所以基本上我想将每个表的每个名称导入我的组合框中。
这是一个 Winform 应用程序
这是否可能无需手动添加每个名称?
这样做的原因是能够选择一个表以便稍后在数据网格中显示该表。
创建 TableName & Table ( Dictionary<string,DataTable>
) 的字典并将其绑定到 ComboBox 的DataSource。
利用
DisplayMember
(从 DataSource 分配 DisplayMember)是 ComboBox 项中显示的数据源中的项。
ValueMemeber
(从 DataSource 分配 ValueMember)是 DataSource 中用作项的实际值的项。
代码
Dictionary<string, DataTable> dictionary = new Dictionary<string, DataTable>();
foreach (DataTable table in ds.Tables)
{
dictionary.Add(table.TableName, table);
}
comboBox1.DataSource = new BindingSource(dictionary, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
或
使用 Linq 查询创建Dictionary<string,DataTable>
Dictionary<string, DataTable> dictionary = ds.Tables.Cast<DataTable>().ToDictionary(x => x.TableName, t => t);
comboBox1.DataSource = new BindingSource(dictionary, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
这里Dictionary
用作DataSource。Dictionary
有两个属性Key
& Value
。Key(TableName) 用作 DisplayMember 和 Value(DataTable) 用作 ValueMember。
在组合框上SelectedIndexChanged
绑定网格DataSource
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = comboBox1.SelectedItem;
}
怎么样
mycombobox.ItemSource = mydataset.Tables.Cast<DataTable>().Select(x => x.Name);
然后在每个 ComboBox Selected Index changed 事件上做
mydatagrid.ItemSource = mydataset.Tables(mycombobox.SelectedIndex);