在网格中创建一个CheckBox,接受0为false

时间:2013-08-14 08:30:51

标签: gridview checkbox devexpress

是否可以使复选框列接受0和1以确定是否应该检查它?我从数据库获取gridView的dataSource,其中一个列使用0或1作为true和false。我需要这个0和1表示在gridView中选中或未选中。我知道我可以创建一个循环来遍历dataTable中的每一条记录,并将值更改为选中或未选中,但实际上有数千个条目,所以这样做可能会很慢,尤其是在要使用的机器上它。是否可以这样强制gridView复选框列?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

来自: customize RepositoryItemCheckEdit display

我认为实现此目标的最佳方法是将列类型更改为Int32(例如),并将0, 1, 2值映射到false, true, indeterminate状态 RepositoryItemCheckEdit.ValueUnchecked
RepositoryItemCheckEdit.ValueChecked,
RepositoryItemCheckEdit.ValueGrayed属性。

请确保您的数据库字段(绑定到此列)是字符串类型字段,并包含“0”,“1”和“2”值。 如果是整数字段,请按如下方式修改代码:

 repchk.ValueChecked = CType(2, Integer)
 repchk.ValueUnchecked = CType(0, Integer)
 repchk.ValueGrayed = CType(1, Integer)

请尝试此解决方案并告知我们您的结果。

<强>参考
How to use RepositoryItemCheckEdit in XtraGrid Column for a dataTable column containing only "True"/"False" values.
xtragrid - Checkbox column
Set checkbox cheched in RepositoryItemCheckEdit
RepositoryItemCheckEdit

答案 1 :(得分:0)

在一般情况下,您可以使用Unbound Columns完成此任务(将一种类型的列转换为另一种类型的列):

using DevExpress.XtraGrid.Views.Base;
//...
gridControl1.DataSource = new List<DataObj> { 
    new DataObj{ ID=0, intFlag=0 },
    new DataObj{ ID=1, intFlag=1 },
    new DataObj{ ID=2, intFlag=0 }
};
gridView1.PopulateColumns();
gridView1.Columns["intFlag"].Visible = false;
gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
{
    FieldName = "boolFlag",
    Caption = "Flag",
    UnboundType = DevExpress.Data.UnboundColumnType.Boolean,
    Visible = true
});
gridView1.CustomUnboundColumnData += gridView1_CustomUnboundColumnData;
//...
void gridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) {
    if(e.Column.FieldName == "boolFlag") {
        if(e.IsGetData)
            e.Value = (int)gridView1.GetRowCellValue(e.ListSourceRowIndex, "intFlag") == 1;
        if(e.IsSetData)
            gridView1.SetRowCellValue(e.ListSourceRowIndex, "intFlag", (bool)e.Value ? 1 : 0);
    }
}