ComboBox的联动

窗体搭建:

实现功能: 加载年级下拉框

               选中年级时加载出科目下拉框

 

加载年级下拉框:

第一步,在DAL层中写一个方法,检索所有的年级名称集合,返回的是泛型集合List<>

        public List<Grade> LoadAllGradeToList()
        {       
            string sql = "select * from grade";
            DataTable dt = SQLHelper.ExecuteDataTable(sql);
            MyTool tool = new MyTool();
            List<Grade> list=tool.DataTableToList<Grade>(dt);
            return list;
        }

第二步,在BLL层对DAL层中的所有方法做传递

   public class GradeBLL
    {
       GradeDAL dal = new GradeDAL();
       public List<Grade> getAllGradeList() 
       {
           return dal.LoadAllGradeToList();
       }
    }

第三步,在load窗体中绑定年级下拉框列

 private void FrmSeachByGrade_Load(object sender, EventArgs e)
        {
            //绑定年级下拉框
            List<Grade> list = grade.LoadAllGradeToList();
            cboGrade.ValueMember = "GradeId";
            cboGrade.DisplayMember = "GradeName";
            cboGrade.DataSource = list;
        }

实现效果:

 

根据年级编号,加载科目下拉框值

第一步,在DAL层写一个根据年级编号获取科目集合的方法

   public class SubjectDAL
    {
       public List<Subject> getAllSubjectByGradeId(int id) 
       {
           string sql = "select * from subject where gradeid=@id";
           SqlParameter para = new SqlParameter("@id",id);
           DataTable dt = SQLHelper.ExecuteDataTable(sql,para);
           MyTool tool = new MyTool();
           List<Subject> list=tool.DataTableToList<Subject>(dt);
           return list;
       }
    }

第二步,在BLL层对DAL层中的所有方法做传递

   public class SubjectBLL
    {
       SubjectDAL dal = new SubjectDAL();

       public List<Subject> getAllSubjectByGradeId(int id) 
       {
           return dal.getAllSubjectByGradeId(id);
       }
    }

第三步,UI层

 SubjectBLL subBll = new SubjectBLL();
        private void cboGrade_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectid = Convert.ToInt32(cboGrade.SelectedValue);
            List<Subject> list = subBll.getAllSubjectByGradeId(selectid);
            cboSubject.ValueMember = "subjectId";
            cboSubject.DisplayMember = "subjectName";
            cboSubject.DataSource = list;

实现效果:

 

但到这里,以上代码实现的功能有一个不可避免的问题

图片解释:

如何解决?

只需要在load事件中写一行代码即可

cboSubject.DropDownHeight = 106;

 

 

注:出现以下错误的解决方案

1.将DataSource=泛型集合,调整到最后一行

2.用标记,在Load 和SelectedIndexChanged之外,定义一个bool类型变量。然后在Load中设置成True,在SelectedIndexChanged中判定flag

转载于:https://www.cnblogs.com/hr1997/p/5495461.html

用Python如何实现多个ComboBox联动? 可以使用tkinter库中的Combobox控件以及绑定相关事件来实现多个ComboBox联动。具体操作可以参考以下代码: ``` import tkinter as tk from tkinter import ttk class App(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.combobox1 = ttk.Combobox(self) self.combobox1.pack(side="left") self.combobox1.bind("<<ComboboxSelected>>", self.update_combobox2) self.combobox2 = ttk.Combobox(self) self.combobox2.pack(side="left") self.combobox2.bind("<<ComboboxSelected>>", self.update_combobox3) self.combobox3 = ttk.Combobox(self) self.combobox3.pack(side="left") # 设置选项列表 self.combobox1["values"] = ["选项1", "选项2", "选项3"] self.combobox2["values"] = [] self.combobox3["values"] = [] def update_combobox2(self, event): # 根据第一个选项更新第二个选项的可选项列表 selected_option = self.combobox1.get() if selected_option == "选项1": self.combobox2["values"] = ["选项A", "选项B", "选项C"] elif selected_option == "选项2": self.combobox2["values"] = ["选项D", "选项E", "选项F"] else: self.combobox2["values"] = [] def update_combobox3(self, event): # 根据第二个选项更新第三个选项的可选项列表 selected_option = self.combobox2.get() if selected_option == "选项A": self.combobox3["values"] = ["1", "2", "3"] elif selected_option == "选项B": self.combobox3["values"] = ["4", "5", "6"] else: self.combobox3["values"] = [] if __name__ == "__main__": root = tk.Tk() app = App(root) app.mainloop() ``` 在这个例子中,我们创建了三个Combobox控件,分别用于展示不同的选项。当用户选择了第一个选项后,程序会根据该选项的值更新第二个选项的可选项列表;当用户选择了第二个选项后,程序会根据该选项的值更新第三个选项的可选项列表。 具体更新的操作在update_combobox2和update_combobox3两个方法中完成,这些方法会在对应的Combobox控件的选项发生变化时被调用,从而实现了多个ComboBox联动效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值