【问题标题】:Select the contain for 2nd combobox depending on the select from the 1st combobox根据从第一个组合框中的选择选择第二个组合框的包含
【发布时间】:2014-04-25 09:27:58
【问题描述】:

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

表 (X):- 插入到类列(A 类,B 类)中。

表 (Y):- 在姓名列中插入学生姓名(乔恩, 玛丽、鲍勃、焦油、迈克)

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

我希望当我从第一个组合框 A 类中选择时,第二个组合框只出现(乔恩,玛丽),如果我从第一个组合框 B 类中选择,第二个组合框只出现在我面前(焦油,迈克,鲍勃)。

我用这个函数来填充第一个组合框:

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);
    }
}

所以,我有 2 个组合框。我想将其设置为当用户在第一个组合框上选择信息时,这将确定在第二个组合框上显示的内容。怎么会这样。

【问题讨论】:

  • 您的意思是说您必须将表分离到数据库中,例如您的班级信息所在的 ClassMaster 以及参考 ClassMaster 表的学生表学生姓名,并且您希望根据所选项目名称下拉列表进行班级下拉将由该特定班级的学生填补?
  • 我有 2 个组合框。我想将其设置为当用户在第一个组合框上选择信息时,这将决定在第二个组合框上显示的内容。
  • 我已经更新了我的答案

标签: c# user-controls


【解决方案1】:

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

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

        }

我建议您不要在代码后面编写与数据库相关的代码,而是使用分层架构,以便您的代码可维护并避免代码重复。您可以通过 3 层架构,您的代码被分红

  1. BAL-业务接入层-你的业务规则可以放在这里
  2. DAL- 你的数据库逻辑在这里从数据库中获取数据
  3. code behind 和 UI-code behind 仅包含对 BAL 和 DAL 的引用,您的 UI 可以有 aspx 文件

【讨论】:

  • 抱歉,这条鳕鱼没用。它不接受这个命令 (strClass = ddlClass.SelectedValue;) 和这个命令 (ddlNames.DataBind();) 和这个 (private List GetRegionByCountry(string clss))。另外//获取姓名列表的数据库代码在这里)你的意思是我在这里只调用函数fillcombo()?谢谢
  • @user3525082 您可以使用您现有的代码来填充第一个下拉列表并使用jave 编写代码以获取GetNamesByClass(字符串类)中第二个下拉列表的数据
【解决方案2】:

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

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

【讨论】:

  • 任何人都可以编写简单的代码?
猜你喜欢
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2016-08-31
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多