C#开发学习笔记:向Dev控件库中的GridControl添加自定义复选框

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Dev控件库自带的有复选框列,默认是不显示状态,如果需要则设置相关的两个属性:</span><pre name="code" class="csharp"><span>	</span>//设置grid显示选择列
        gridview.OptionsSelection.MultiSelect = true;
        gridview.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect;

 

向Dev控件库中的GridControl添加自定义复选框

1.用代码添加:

 //设置grid数据行可以多选
        gridview.OptionsSelection.MultiSelect = true;//设置数据行可以多行选择
        gridview.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect;//设置选中一整行
        DevExpress.XtraGrid.Columns.GridColumn col = new DevExpress.XtraGrid.Columns.GridColumn();
        col.FieldName = "Selection";
        col.Caption = "选择";
        col.VisibleIndex = 0;//设置列显示顺序,0表示显示为第一列
        col.SortMode = DevExpress.XtraGrid.ColumnSortMode.Value;
        col.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
        col.ColumnEdit = new RepositoryItemCheckEdit() //绑定该列为复选框列(checkedit控件)
        {
              NullStyle=DevExpress.XtraEditors.Controls.StyleIndeterminate.Unchecked,//设置未选中时,复选框的样子
              ValueChecked ="True",//设置选中时的value值
              ValueUnchecked = "False"//设置未选中时value的值
        };
        col.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;//设置数据绑定的类型为boolean类型
        col.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;                
        gridview.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//设置列标题居中
        gridview.Columns.Add(col);
        col.AbsoluteIndex = 0;//由于数据源有隐藏列(会导致列重新排序),所以需要设置该属性为0(将添加的设置为第一列)
	DataTable dt = new DataTable();
        foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridview.Columns)
        {
            if (item.Caption == "选择")
            {
                 dt.Columns.Add(item.FieldName);
                 break;
            }
        }
<span style="white-space:pre">	</span>//将dt与数据源合并(相当于将复选框列填加到数据源)
        ds.Tables[0].Merge(dt);
        gridcontrol.DataSource = ds.Tables[0];

在添加列时,遇见了选中复选框后,鼠标焦点移到其他cell时,复选框状态又还原为未选中状态(一开始未绑定数据源),查找资料之后添加了绑定复选框列;到数据源的代码,测试时问题依然存在,后来发现原因为在绑定列为复选框时,没有绑定ValueChecked 和ValueUnchecked的值 (这两个值我绑定的为String类型,用Run Designer添加列自动为Boolean类型,不知道是否为版本原因(我使用的是15.2.10,其他人使用的是低版本),其他人不修改这两个属性的值类型为String也不会出现上述问题,而我的却会出现)

2,直接使用Grid的Run Designer添加

可以参考http://blog.csdn.net/jiankunking/article/details/17992063

3.当cell的值改变时设置复选框为选中状态

   <span style="white-space:pre">	</span>private void gridView1_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {           
            gridView1.SetRowCellValue(e.RowHandle,gridView1.Columns.ColumnByFieldName("Selection"), "True");
        }

4.获取Grid中新增的选中的数据

        DataTable dt = new DataTable();
        DataTable result_dt = new DataTable();
        try
        {               
             int[] RowHandle = gridview.GetSelectedRows();
             dt=gridview.GetFocusedDataRow().Table;
             result_dt.Merge(gridview.GetFocusedDataRow().Table);
             result_dt.Clear();
             //将新增的数据行添加到dt数据表
             for (int i = 0; i < RowHandle.Count(); i++)
             {
                if (gridview.GetDataRow(RowHandle[i]) != null)
                     dt.Rows.Add(gridview.GetDataRow(RowHandle[i]));
             }
             //将选中的数据过滤出来(通过添加的选择列过滤)
             foreach (DataRow dr in dt.Rows)
             {
                 if(dr["Selection"]=="True")
                      result_dt.ImportRow(dr);
             }                
         }
一开始使用的获取数据行的代码是DataRow dr = gridview.GetFocusedDataRow();这样确实可以获取到数据行(只针对一行数据而言,如果是新增多行数据,则使用上面的方法),但是在使用dt.ImportRow(dr)时发现dr并没有添加到表中,原因是dr的 RowStateDeleted,Deleted 该状态表示该行不属于任何表,或则已经从表中分离出去了,不再属于任何表的 DataRow 对象。(相当于自由人),不能使用ImprotRow方法,所以使用dt.Rows.Add()方法





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值