C# 根据从第一个组合框中选择,选择包含第二个组合框

C# 根据从第一个组合框中选择,选择包含第二个组合框,c#,user-controls,C#,User Controls,我有两个表,第一个表名(X)和(类)列。第二个表名(Y)和(name)列,如下所示: 表(X):插入类别栏(A类、B类) 表(Y):-在姓名栏中插入学生姓名(Jon, 玛丽、鲍勃、柏油、迈克) 然后我用了两个组合框;第一个组合框包含表(X)(即A类、B类),第二个组合框包含表(Y)(即学生Jon、Mary、Bob、tar、Mike的姓名) 我想当我从第一个组合框类别A中选择时,第二个组合框只会出现(Jon,Mary),如果我从第一个组合框类别B中选择,第二个组合框只会出现在我眼前(tar,Mik

我有两个表,第一个表名(X)和(类)列。第二个表名(Y)和(name)列,如下所示:

表(X):插入类别栏(A类、B类)

表(Y):-在姓名栏中插入学生姓名(Jon, 玛丽、鲍勃、柏油、迈克)

然后我用了两个组合框;第一个组合框包含表(X)(即A类、B类),第二个组合框包含表(Y)(即学生Jon、Mary、Bob、tar、Mike的姓名)

我想当我从第一个组合框类别A中选择时,第二个组合框只会出现(Jon,Mary),如果我从第一个组合框类别B中选择,第二个组合框只会出现在我眼前(tar,Mike,Bob)

我使用此函数填充第一个组合框:

void fillcombo()
{
    string Coonstring = "datasource=localhost;port=3306;username=root;password=***;Charset=utf8";
    string cmd = "select class from project.X ;";
    MySqlConnection connectionDatabase = new MySqlConnection(Coonstring);
    MySqlCommand cmddata = new MySqlCommand(cmd, connectionDatabase);
    MySqlDataReader myreader;

    try
    {
        connectionDatabase.Open();
        myreader = cmddata.ExecuteReader();
        while (myreader.Read())
        {
            string sname = myreader.GetString("class");
            comboBox1.Items.Add(sname);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

所以,我有两个组合框。我想将其设置为,当用户选择第一个组合框上的信息时,将确定第二个组合框上显示的内容。如何做到这一点。

您可以使用第一个组合框的“SelectionChanged”事件。每次用户在组合框上选择一个新值时,它都会被触发,并且您在事件参数中有实际选择的项,因此很容易实现从那里填充第二个组合框的逻辑


如果您使用的是XAML,那么在将属性绑定到“SelectedItem”控件,然后将逻辑放入VM时,可以使用类似的方法。

您可以根据为第一个下拉列表选择的值轻松绑定第二个下拉列表的内容。我假设您的第一个下拉列表是ddlClass,第二个下拉列表是ddlNames。您可以参考以下代码段。希望这有帮助

protected void ddlClass_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Remove Names dropdownlist items 
            ddlNames.Items.Clear();
            string strClass = string.Empty;
            ComboBox comboBox = (ComboBox) sender;
    strClass= (string) ddlClass.SelectedItem;
            List<string> list = null;

            // Bind Names dropdownlist based on Class value 
            list = GetNamesByClass(strClass);
            ddlNames.DataSource = list;



        }

        private List<string> GetNamesByClass(string clsss)
        {
            //Your database code to get names list based on class goes here
            //have to write code to get 2nd dropdown data here

        }
protectedvoid ddlClass\u SelectedIndexChanged(对象发送方,事件参数e)
{
//删除名称下拉列表项
ddlNames.Items.Clear();
string strClass=string.Empty;
ComboBox ComboBox=(ComboBox)发送方;
strClass=(字符串)ddlClass.SelectedItem;
List=null;
//基于类值绑定名称dropdownlist
list=GetNamesByClass(strClass);
ddlNames.DataSource=列表;
}
私有列表GetNamesByClass(字符串clsss)
{
//根据类获取名称列表的数据库代码如下
//必须编写代码才能在这里获得第二个下拉数据
}
我建议您不要在代码隐藏中编写与数据库相关的代码,而应该使用分层体系结构,这样您的代码就可以维护并避免代码重复。您可以经历三层体系结构,其中您的代码被分配到

  • BAL-业务访问层-您的业务规则可以放在这里
  • DAL-您的数据库逻辑在这里从数据库获取数据
  • 代码隐藏和用户界面-代码隐藏只包含对BAL和DAL的引用,您可以为您的用户界面创建aspx文件

  • 你的意思是说你必须将表分离到数据库中,比如说ClassMaster,你的类信息所在的位置,以及学生表中的学生名,参考ClassMaster表,你想根据所选的项目进行类下拉列表。名称下拉列表将由该特定类的学生填写?我有两个组合框。我想将其设置为,当用户在第一个组合框上选择一个信息时,该信息将决定第二个组合框上显示的内容。我已更新了我的回答抱歉,此cod不起作用。它不接受此命令(strClass=ddlClass.SelectedValue;)和此命令(ddlNames.DataBind();)以及此命令(private List GetRegionByCountry(string clsss))。另外//获取名称列表的数据库代码在这里)您的意思是在这里我只调用函数fillcombo()?Thanks@user3525082您可以使用现有代码填充第一个下拉列表,并编写代码以获取GetNamesByClass(字符串类)中第二个下拉列表的数据。任何人都可以编写简单的代码吗?