如何将两个组合框项目匹配在一起
How to Match two comboboxes items together
我有两个组合框,它们应该包含两个不同的信息。
1.cb1: select table_name from information_schema.tables (这个显示多个tables)
2.cb2:应该用列名填充它。
示例:我在 cb1 中有三个 table 具有相同的属性,但在列 EmpName
中具有不同的值(tblLondon、tblBerlin、tblRom、...)
现在,每当我在第一个组合框中选择 table 时,我想在第二个组合框中动态显示 EmpName 列。
cb1[tblLondon] cb2[John,Mavis,Chris,Mike..]
或
cb1[tblBerlin] cb2[Günther,Peter, Sophie,Sunny, ..]
你能帮帮我吗
string C = ConfigurationManager.ConnectionStrings[""].ConnectionString;
SqlConnection con = new SqlConnection(C);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = ("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME ASC");
try
{
// Open connection, Save the results in the DT and execute the spProc & fill it in the DT
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
dt = new DataTable();
adapter.Fill(dt);
cbTbl.DisplayMember = "TABLE_NAME";
cbTbl.ValueMember = "TABLE_NAME";
//Fill combobox with data in DT
cbTbl.DataSource = dt;
// Empty bzw. clear the combobox
cbTbl.SelectedIndex = -1;
此代码正在运行并填充我的 cb1(组合框)
现在我真的不知道如何使用 cb2
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
如果我理解正确,并且如果你在 SQL 服务器或其他数据库中有此数据,你应该使用 SelectedIndexChange
事件并为该 ID 加载项目(使用显示成员和值成员匹配 ID)。
看看this。它可能对你有帮助
编辑:
您可以使用以下代码执行此操作:(如果您不使用数据库)
您应该在 cb1.SelectedIndexChange(或值)
var cb2items = new Dictionary<int, string> {{1, "Name"}, {1, "anotherName"},{2,"Name"},{2, "anotherName"}}; // use the number for parent Id in cb1
foreach (var item in cb2items)
{
if (item.Key == int.Parse(comboBox1.SelectedValue.ToString()))
{
comboBox2.Items.Add(item);
}
}
编辑 2:
在 cb1.SelectedValueChange 中使用此代码:
string C = ConfigurationManager.ConnectionStrings[""].ConnectionString;
SqlConnection con = new SqlConnection(C);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = ("SELECT ... WHERE TableName = cb1.SelectedValue");
spProc & fill it in the DT
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
dt = new DataTable();
adapter.Fill(dt);
cbTbl.DisplayMember = "TABLE_NAME";
cbTbl.ValueMember = "TABLE_NAME";
cbTb2.DataSource = dt;
您还可以创建一个过程,将来自 table 名称的项目作为输入发回。如果你使用过程,你的代码性能会更好。
编辑 3:
将此代码放入 cbTb2.SelectedValueChange
事件中:
try
{
int a = int.Parse(cbTB2.SelectedValue.ToString());
}
catch { }
您可能想查看组合框的事件,"SelectedIndexChanged" 或 "SelectedValueChanged" 应该这样做