根据从第一个组合框中的选择,为第二个组合框选择包含
本文关键字:组合 选择 包含 第二个 第一个 | 更新日期: 2023-09-27 17:59:57
我有两个表,第一个表名(X)带有(class)列。第二个表名(Y)带有(name)列,如下所示:
表(X):插入类别列(A类、B类)。
表(Y):在姓名栏中插入学生姓名(Jon,Mary,Bob,tar,Mike)
然后我用了两个组合框;第一个组合框包含表(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);
}
}
所以,我有两个组合框。我想把它设置成,当用户在第一个组合框上选择一个信息时,它将决定第二个组合框上将显示什么。怎么能做到这一点。
您可以根据为第一个下拉列表选择的值轻松绑定第二个下拉列表的内容。我假设您的第一个下拉菜单是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
}
我建议您不要在代码隐藏中编写与数据库相关的代码,而是使用分层体系结构,这样您的代码是可维护的,并避免代码重复。您可以通过3层架构,其中您的代码被分红到中
- BAL-业务访问层-您的业务规则可以放在这里
- DAL-您的数据库逻辑在此从数据库中获取数据
- 代码隐藏和UI-代码隐藏仅包含对BAL和DAL的引用,您可以为UI创建aspx文件
您可以使用第一个组合框的"SelectionChanged"事件。每次用户在组合框上选择新值时,它都会被触发,并且在事件参数中有实际选择的项目,因此很容易实现从那里填充第二个组合框的逻辑。
如果使用XAML,则在将属性绑定到"SelectedItem"控件,然后将逻辑放入VM时,可以使用类似的方法。