我有两个表第一个表名(X)和(类)列。第二个表名(Y)带(名称)列,如下所示:
表(X): - 插入类列(A类,B类)。
表(Y): - 在名称栏中插入学生姓名(Jon, 玛丽,鲍勃,焦油,迈克)
然后我使用了两个组合框;第一个组合框包含表(X)(即A类,B类),第二个组合框包含表(Y)(即学生Jon,Mary,Bob,tar,Mike的名字)。
我希望当我从第一个组合框A中选择时,第二个组合框只出现(Jon,Mary),如果我从第一个组合框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个组合框。我想设置它,以便当用户选择第一个组合框上的信息时,这将决定在第二个组合框上显示的内容。怎么办呢?
答案 0 :(得分:1)
您可以根据为第一个下拉列表选择的值轻松绑定第二个下拉列表的内容我假设您的第一个下拉列表是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层架构,将代码分成
答案 1 :(得分:0)
您可以使用&#34; SelectionChanged&#34;第一个组合框的事件。每次用户在组合上选择一个新值时它都会被触发,并且你在事件参数中有实际选择的项目,因此很容易实现从那里填充第二个组合框的逻辑。
如果您正在使用XAML,则在将属性绑定到&#34; SelectedItem&#34;时,可以使用类似的方法。控制然后将逻辑放入VM中。