XtraGrid中CheckEdit编辑器旁边的自定义标题

时间:2014-12-28 18:22:41

标签: winforms devexpress xtragrid

我有一个绑定到数据源的XtraGrid,我想要一个列中有一个复选框,并且在同一个单元格的复选框旁边有一个标题。我可以从数据源中的另一列获得Checked True或False,而且我还需要从Datasource中的另一列获取标题文本......一旦我掌握了实现标题更改的操作,这部分就很容易了。

我的问题是:

如何以编程方式更改同一单元格中CheckEdit旁边显示的文本?

类似于(Tick和Untick表示复选框状态):

Tick  Apples
Untick Bananas

但是,我的尝试只显示文字' Check' - 显然是CheckEdit编辑器中的默认标题:

Tick Check
Untick Check

我搜索了DevExpress支持中心,他们在TreeList(而不是XtraGrid)中使用时只有CheckEdit Repository项目的说明。我知道它将涉及管理CustomDrawCell事件和其他一些事件 - 这很好。

1 个答案:

答案 0 :(得分:1)

我认为,您对XtraTreeList的说明也适用于XtraGrid。但我可以用另一种方式向你建议 您可以使用GridView.CustomRowCellEdit个事件和两个ResositoryItemCheckEdit个对象:

private RepositoryItemCheckEdit editTick;
private RepositoryItemCheckEdit editUntick;

只需将Tick文字设为editTick.Caption属性,将Untick文字设为editUntick.Caption属性。
这是一个例子:

//Initialize repository items:
editTick = new RepositoryItemCheckEdit() { GlyphAlignment = HorzAlignment.Near, Caption = "Apples" };
editUntick = new RepositoryItemCheckEdit() { GlyphAlignment = HorzAlignment.Near, Caption = "Bananas" };

//Add handler for CheckedChanged event:
Action<object, EventArgs> action = (s, e) =>
{
    var ownerEdit = s as CheckEdit;

    if (ownerEdit == null)
        return;

    ownerEdit.Text = ownerEdit.Checked ? editTick.Caption : editUntick.Caption;
};

editTick.CheckedChanged += new EventHandler(action);
editUntick.CheckedChanged += new EventHandler(action);

//Some sample DataSource:
var table = new DataTable();

table.Columns.Add("ID", typeof(int));
table.Columns.Add("Bool", typeof(bool));

table.Rows.Add(0, false);
table.Rows.Add(1, false);
table.Rows.Add(2, true);
table.Rows.Add(3, false);
table.Rows.Add(4, true);
table.Rows.Add(5, true);
table.Rows.Add(6, false);
table.Rows.Add(7, true);

gridControl.DataSource = table;

//Here comes the CustomRowCellEdit:
gridView1.CustomRowCellEdit += (s, e) =>
{
    if (e.Column.FieldName != "Bool" || e.CellValue == null) //Put your own field name here instead of "Bool".
        return;

    e.RepositoryItem = (bool)e.CellValue ? editTick : editUntick;
};

//Add CustomColumnDisplayText event, so you can see your "Apples" in group rows and filters:
gridView1.CustomColumnDisplayText += (s, e) =>
{
    if (e.Column.FieldName != "Bool")
        return;

    e.DisplayText = (bool)e.Value ? editTick.Caption : editUntick.Caption;
};