我有一个绑定到数据源的XtraGrid,我想要一个列中有一个复选框,并且在同一个单元格的复选框旁边有一个标题。我可以从数据源中的另一列获得Checked True或False,而且我还需要从Datasource中的另一列获取标题文本......一旦我掌握了实现标题更改的操作,这部分就很容易了。
我的问题是:
如何以编程方式更改同一单元格中CheckEdit旁边显示的文本?
类似于(Tick和Untick表示复选框状态):
Tick Apples
Untick Bananas
但是,我的尝试只显示文字' Check' - 显然是CheckEdit编辑器中的默认标题:
Tick Check
Untick Check
我搜索了DevExpress支持中心,他们在TreeList(而不是XtraGrid)中使用时只有CheckEdit Repository项目的说明。我知道它将涉及管理CustomDrawCell事件和其他一些事件 - 这很好。
答案 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;
};