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;
               }

    }

  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;

  3. 3

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

Devexpress GridControl中combobox级联显示 z的更多相关文章

  1. 在DevExpress GridControl中添加进度条控件 z

    首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

  2. extjs中combobox默认显示第一个值

    在进入页面时往往用户希望页面能够显示默认的内容,但是页面中会存在一些选项通过用户选择之后才会加载相应的内容.在这篇文章里面介绍了如何去设置页面中默认的内容,如combobox默认显示第一个值. 页面: ...

  3. Devexpress GridControl中 repositoryItemCheckEdit作为选择列以及作为显示列的使用方法

    一.在gridcontrol列表控件中使用单选框作为选择列,这里有两种方式. 方式一:选择gridcontrol控件的Run Designer按钮,添加一列,设置该列的ColumnEdit为check ...

  4. 在DevExpress GridControl的一列中显示图片

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking 近期做项目的时候用到了将GridControl中一列设置为PictureEdit类型,然后通过这一 ...

  5. Devexpress GridControl z

    http://minmin86121.blog.163.com/blog/static/4968115720144194923578/ 1 AllowNullInput=False; --Devexp ...

  6. DevExpress GridControl 显示外部图片

    如果数据源中只包含图片的链接,如何在DevExpress GridControl的一列中显示外部图片? 要实现该功能,可通过非绑定列的方式来实现.具体实现方法如下: 1.    创建了一个非绑定列并设 ...

  7. winform中ComboBox实现text和value,使显示和值分开,重写text和value属性

    winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...

  8. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅   ...

  9. WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

随机推荐

  1. Javascript通过className选择元素

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. ***redis linux 命令使用总结

    redis命令参考: http://redisdoc.com/ 1. [root@iZ25rloipcsZ src]# redis-cli-bash: redis-cli: command not f ...

  3. HDU 3501 Calculation 2 (欧拉函数)

    题目链接 题意 : 求小于n的数中与n不互质的所有数字之和. 思路 : 欧拉函数求的是小于等于n的数中与n互质的数个数,这个题的话,先把所有的数字之和求出来,再减掉欧拉函数中所有质数之和(即为eula ...

  4. hdu 4599 Dice 概率DP

    思路: 1.求f[n];dp[i]表示i个连续相同时的期望 则 dp[0]=1+dp[1]     dp[1]=1+(5dp[1]+dp[2])/6     ……     dp[i]=1+(5dp[1 ...

  5. hdu 1709 The Balance

    母函数的特殊情况,左右两边都可以放,如样例1,2,9 母函数为(1+x+1/x)*(1+x^2+1/x^2)*(1+x^9+1/x^9) 化简为(1+x+x^2)*(1+x^2+x^4)*(1+x^9 ...

  6. [SQL Server系] -- 视图

    1:定义 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据. 从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表. 从数据库系统内部来看,视图是由一张或多张表中的数 ...

  7. 缓存初解(三)---Spring3.0基于注解的缓存配置+Ehcache和OScache

    本文将构建一个普通工程来说明spring注解缓存的使用方式,关于如何在web应用中使用注解缓存,请参见: Spring基于注解的缓存配置--web应用实例 一.简介 在spring的modules包中 ...

  8. 开发版本控制git

    git init 在git命令行中依次输入 touch readme.txt并回车, git add . 点代表所有, git commit -m "init first"并回车, ...

  9. 是什么让 Ubuntu 选用 Qt 而不是 GTK?

    是什么让 Ubuntu 选用 Qt 而不是 GTK? 一个正在发生的事实,Ubuntu正在不断Qt化!我曾一直在抱怨的Software Center,今日一看源码,竟然有softwarecenter/ ...

  10. 开源调度框架Quartz最佳实践

    开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...