0

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

谢谢您的帮助。

4

2 回答 2

2

From: 自定义RepositoryItemCheckEdit显示

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


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

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

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

参考
如何在 XtraGrid 列中为仅包含“True”/“False”值的 dataTable 列使用 RepositoryItemCheckEdit。
xtragrid - 复选框列
设置复选框在 RepositoryItemCheckEdit
RepositoryItemCheckEdit中检查

于 2013-08-14T09:42:54.300 回答
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);
    }
}
于 2013-08-14T09:37:52.280 回答