Devexpress GridControl中combobox级联显示

2025-09-29 12:08:15

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、选择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、 

//grid中的下拉框必须要处理一下,不然会报(对象必须实现iconvertible)错误

 

       private void cbx_ParseEditValue(object sender, ConvertEditValueEventArgs e)

 

       {

 

           e.Value = e.Value.ToString();

 

           e.Handled = true;

 

       }

 

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢