如何将两个组合框项目匹配在一起

时间:2015-01-22 18:26:02

标签: c# winforms combobox

我有两个组合框,应该包含两种不同的信息。

1.cb1:从information_schema.tables中选择table_name(这显示多个表)
2.cb2:应该用列名填充它。

示例:我在cb1中有三个具有相同属性的表,但在EmpName列(tblLondon,tblBerlin,tblRom,...)中具有不同的值

现在,每当我在第一个组合框中选择一个表时,我想动态地在第二个组合框中显示EmpName列。

cb1[tblLondon]                          cb2[John,Mavis,Chris,Mike..]

OR

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)
        {


        }

2 个答案:

答案 0 :(得分:0)

如果我理解正确,并且您在SQL服务器或其他数据库中有此数据,则应使用SelectedIndexChange事件并为该Id加载项目(使用显示成员和值成员作为匹配ID)。

看看this。它可能对您有所帮助

编辑:
您可以使用以下代码执行此操作:(如果您不使用数据库)
你应该在cb1.SelectedIndexChange(或value)

中使用这段代码
        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;

您还可以创建一个过程,将表名称中的项目作为输入发回。如果你使用程序,你的代码表现更好。

编辑3:

将此代码放入cbTb2.SelectedValueChange事件:

        try
        {
            int a = int.Parse(cbTB2.SelectedValue.ToString());
        }
        catch { }

答案 1 :(得分:0)

您可能希望看到组合框的事件,“SelectedIndexChanged”或“SelectedValueChanged”应该这样做