动态、联动 绑定combobox控件(二级菜单)、combobox显示多级菜单

当在一个combobox1中选择某一项号,另一个combobox2中也跟着变化  做法如下:
load()事件 
DAL.ProjectCollection c = DAL.DB.Select().From(DAL.Project.Schema).ExecuteAsCollection<DAL.ProjectCollection>();
        
            comboBox1.DisplayMember = DAL.Project.Columns.ProjectName;
            comboBox1.ValueMember = "ProjectID";
            comboBox1.DataSource = c;//一定要写在DisplayMember和ValueMember下面才能 再次绑定

            DAL.TaskCollection tasks = DAL.DB.Select().From(DAL.Task.Schema).ExecuteAsCollection<DAL.TaskCollection>();
            DAL.Task _Task = new ProjectManage.DAL.Task();
            _Task.TaskID = 0;
            _Task.TaskName = "";
            tasks.Insert(0, _Task);                  //加入空行   
            comboBox2.DisplayMember = DAL.Task.Columns.TaskName;
            comboBox2.ValueMember = "TaskID";
            comboBox2.DataSource = tasks;
}
  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)//从新绑定
        {
            string projectid = comboBox1.SelectedValue.ToString();
            if (projectid == null)
                return;
            DAL.TaskCollection tasks = DAL.DB.Select().From(DAL.Task.Schema).Where(DAL.Task.Columns.ProjectID).IsEqualTo(projectid).ExecuteAsCollection<DAL.TaskCollection>();
            DAL.Task _Task = new ProjectManage.DAL.Task();
            _Task.TaskID = 0;
            _Task.TaskName = "";
            tasks.Insert(0, _Task);  //添加空行
           
            comboBox2.DisplayMember = DAL.Task.Columns.TaskName;
            comboBox2.ValueMember = "TaskID";
            comboBox2.DataSource = tasks;  //最后设定数据源
        }
///在comboBox1中 显示多级菜单 并显示区分一级、二级、三级等
            cbbProjectID.DisplayMember = "ProjectName";
            cbbProjectID.ValueMember = "ProjectID";
            BindProject(0, "|");                                                 //绑定

          public void BindProject(int fid, string prefix)                   //递归调用
        {
            DAL.ProjectCollection c = new Select().From(DAL.Project.Schema).Where(DAL.Project.Columns.FatherID).IsEqualTo(fid).ExecuteAsCollection<DAL.ProjectCollection>();
                            //查询数据库,符合条件的
            foreach (DAL.Project p in c)
            {
                if (fid > 0)
                {
                    p.ProjectName = prefix + "-" + p.ProjectName;                   //区分一二级
                }
                cbbProjectID.Items.Add(p);
                BindProject(p.ProjectID, prefix + "|");                                    //区分等级
                }

            }
          
        }

转载于:https://www.cnblogs.com/fengdiechang/archive/2009/08/10/1542760.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`QComboBox`是Qt库中的一个控件,用于提供下拉列表的选择选项。如果你想要在`QComboBox`中实现多列显示多级菜单,你可以按照以下步骤操作: 1. **设置多列显示**: - 使用`QComboBox::setModel()`方法,将`QStandardItemModel`替换为模型,该模型包含多列数据。每个`QStandardItem`代表一行,它的`data()`方法可以返回不同列的数据。 - 使用`QComboBox::setItemData()`或`QStandardItem::setData()`方法设置每一行的列数据。 ```cpp QStandardItemModel model; model.setHeaderData(0, Qt::Horizontal, "Column 1"); model.setHeaderData(1, Qt::Horizontal, "Column 2"); // 添加更多列头 // 添加多行数据 QStandardItem *item = new QStandardItem("Item 1"); item->setData(QStringLiteral("Value 1"), 0); item->setData(QStringLiteral("Value 1 details"), 1); model.appendRow(item); // 设置模型到QComboBox comboBox.setModel(&model); ``` 2. **处理多级菜单**: - 如果你需要创建多级菜单(通常用于显示更详细的信息或子菜单),你可以使用`QMenu`和`QAction`。当用户选择一个顶级项时,你可以动态显示相关的二级菜单。 - 在`QComboBox::activated()`信号连接的槽函数中,根据当前选中的项创建并显示菜单。 ```cpp void comboBoxActivated(QModelIndex index) { if (index.isValid()) { QStandardItem *parentItem = model.itemFromIndex(index); QMenu menu(parentItem); // 假设每个顶级项都有一个二级菜单动态添加动作 QAction *action1 = menu.addAction("Action 1"); // ... 添加更多二级菜单项 menu.exec(comboBox.mapToGlobal(comboBox.viewport()->rect().center())); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值