zoukankan      html  css  js  c++  java
  • Devexpress GridControl中combobox级联显示 z

    http://minmin86121.blog.163.com/blog/static/4968115720143163533356/

    在 使用GridControl时,可能会有需求要求某2列显示combobox控件,而且在选择第一列的值时,第2列绑定的数据源发生变化。当然这在其他地 方很容易实现,但是在gridcontrol的列中就不能用以往的思维方式进行了,因为在gridcontrol中,你只有选中这一列,它才会显示出该列 所绑定控件的特性,否则只是一个普通的lable。

    基本思路:在点击第2列时才去获取第一列选中的值,然后根据该值查询出第2列的数据进行绑定。

    方法/步骤

    1. 1

      combobox 控件的创建,我是在CustomRowCellEditForEditing这个事件下处理的。(因为我所需要显示combobox的列是动态创建的,所 以需要这样创建,如果你是固定显示,直接绑定combobox点击事件就可以了。)在这个事件里面,还可以控制某一列不同行显示不同控件。(因为 Devexpress是只能设置某一列控件的属性的,不能精准到控制每个单元格中的控件)

       private void gvwFetchData_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
             {
                 DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;

                 RepositoryItemComboBox cbx = new DevExpress.XtraEditors.Repository.RepositoryItemComboBox();

                 switch (e.Column.FieldName)
                 {
                     //case "DBConstructionID":
                         //cbx.Items.Clear();
                         //   cbx.Items.AddRange(cbxConstructions.Select(c => new Models.ComboBoxItemTextValue<int>(c.FieldID, c.FieldName)).ToList());
                         //   cbx.SelectedValueChanged += new EventHandler(cbx_SelectedValueChanged);
                         //   //e.RepositoryItem = cbx;
                         //   gclDataOperate.RepositoryItems.Add(cbx);
                         //   gvwFetchData.Columns["ConstructionName"].ColumnEdit = cbx;

                     //break;
                     case "BuildingName":

                        //获取该行楼盘id
                         string constructid = gvwFetchData.GetRowCellValue(e.RowHandle, "DBConstructionID").ToString();
                         //楼栋

                        //根据楼盘查询楼栋的数据
                         IList<BLL.RealDataWeb.ComboBoxField> cbxBuildings = matchData.GetBuilding(iCityID, Convert.ToInt32(constructid));

                        //给该行楼栋combobox绑定数据源
                         cbx.Items.Clear();
                         cbx.Items.AddRange(cbxBuildings.Select(b => new Models.ComboBoxItemTextValue<int>(b.FieldID, b.FieldName)).ToList());

                       //combobox值改变后触发
                         cbx.SelectedValueChanged += new EventHandler(cbx_SelectedValueChanged);

                        //下拉框选中值后,需要进行转换
                         cbx.ParseEditValue += new ConvertEditValueEventHandler(cbx_ParseEditValue);

                        //指定该列控件
                         e.RepositoryItem = cbx;
                         break;
                     case "HouseName":
                         string BuindId = gvwFetchData.GetRowCellValue(e.RowHandle, "DBBuildingID").ToString();
                         //房号
                         IList<BLL.RealDataWeb.ComboBoxField> House = matchData.GetHouse(iCityID, Convert.ToInt32(BuindId));
                         cbx.Items.Clear();
                         cbx.Items.AddRange(House.Select(h => new Models.ComboBoxItemTextValue<int>(h.FieldID, h.FieldName)).ToList());
                         cbx.SelectedValueChanged += new EventHandler(cbx_SelectedValueChanged);
                         cbx.ParseEditValue += new ConvertEditValueEventHandler(cbx_ParseEditValue);
                         e.RepositoryItem = cbx;
                         break;
                     default: break;
                 }

             }

      Devexpress GridControl中combobox级联显示
    2. 2

      选择combobox的值时进行的处理。(例如选择楼盘后,将楼盘id存放在一隐藏列中,在点击楼栋时,获取该id,查询所需要的数据源,进行绑定)

       private void cbx_SelectedValueChanged(object sender, EventArgs e)
             {
                 BaseEdit edit = gvwFetchData.ActiveEditor;
                 //下拉框数据更改之后,改变级联下拉框数据
                 switch (gvwFetchData.FocusedColumn.FieldName)
                 {
                     //case "ConstructionName"://楼盘
                     //    gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBConstructionID"], ((ComboBoxItemTextValue<int>)edit.EditValue).SelectValue);
                     //    gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["BuildingName"], "选择楼栋");
                     //    gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBBuildingID"], 0);
                     //    gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["HouseName"], "选择房屋");
                     //    gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBHouseID"], 0);

                     //    break;
                     case "BuildingName"://楼栋
                         gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBBuildingID"], ((ComboBoxItemTextValue<int>)edit.EditValue).SelectValue);
                         gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBHouseName"], "选择房屋");
                         gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBHouseID"], 0);

                         break;
                     case "HouseName"://房号
                         gvwFetchData.SetFocusedRowCellValue(gvwFetchData.Columns["DBHouseID"], ((ComboBoxItemTextValue<int>)edit.EditValue).SelectValue);
                         break;

      Devexpress GridControl中combobox级联显示
      Devexpress GridControl中combobox级联显示
    3. 3


      //grid中的下拉框必须要处理一下,不然会报(对象必须实现iconvertible)错误
             private void cbx_ParseEditValue(object sender, ConvertEditValueEventArgs e)
             {
                 e.Value = e.Value.ToString();
                 e.Handled = true;
             }

  • 相关阅读:
    解决GET http://localhost:8080/js/layui/layui.js net::ERR_ABORTED 404
    按钮向右浮动
    @RequestParam、@PathVariable、 @RequestBody用法
    【报错】No converter found for return value of type: class java.util.HashMap
    Kendo UI for jQuery数据管理使用教程:PivotGrid
    界面控件DevExpress WPF——支持UI自动化和Appium测试
    Visual Studio插件CodeRush v20.2.9发布——新的单元测试体验
    DevExpress WinForms帮助文档:如何初始表单位置
    C# 8 & C# 9功能如何进行单元测试?这里有答案
    最新版Devexpress WinForm.NET开发环境配置信息
  • 原文地址:https://www.cnblogs.com/zeroone/p/3970045.html
Copyright © 2011-2022 走看看