今天小芸在做表格控件的时候遇到一个问题,即根据不同的情况设定不同行的RspostoryItemEdit控件的属性,她用的是Button,于是我开始研究怎么做,大概想到了两种思路,一种是在绑定完数据源后,遍历每一行,设定RspostoryItemEdit控件的属性,先获取到单元格,然后将单元格转化为控件类型,但实际操作中发现,利用 GridView.GetRowCellValue 方法发现获取到的仅仅是该单元格的值,非为控件,于是这种思路放弃了。
第二种思路是,在绑定数据源的时候,也就是RspostoryItem生成或者在其绘制的时候修改其属性,第二种成功了,现代码如下:
1.根据不同列名设置所有的RepositoryItem 情况;
在表格的CustomRowCellEdit事件中做如下处理,就可以根据girdview中的每行状态不同,分别设置每行repositoryitembuttonedit的属性
private void grdvMain_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
RepositoryItemButtonEdit button = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
button.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
button.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
button.Click += new EventHandler(button_Click);
e.RepositoryItem = button; //这一句位置有待商榷,这样写整个表格都不会出来
switch (e.Column.FieldName) //此处为根据列的不同名称设定不同的RepositoryItem 情况,
{
case "A":
button.Buttons[0].Caption = "A"
break;
case "B":
button.Buttons[0].Caption = "B"
break;
case "C":
button.Buttons[0].Caption = "C";
break;
default:
break;
}
}
2.根据每行记录设置所有的RepositoryItem 情况;
private void grdvMain_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
if(e.Column==控件在的列)
{
RepositoryItemButtonEdit button = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
button.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
button.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
button.Click += new EventHandler(button_Click);
e.RepositoryItem = button; //这一句位置有待商榷,这样写整个表格都不会出来
}
switch (e.CellValue) //此处为根据列的每行值设定不同的RepositoryItem 情况,
{
case "A":
button.Buttons[0].Caption = "A"
break;
case "B":
button.Buttons[0].Caption = "B"
break;
case "C":
button.Buttons[0].Caption = "C";
break;
default:
break;
}
}
需要注意的有以下几点
1.RepositoryItemButtonEdit .Buttons属性是讲RepositoryItemButtonEdit 中有几个Button,是一个枚举类型,并且和Grid的行数无关,仅仅是设计器中的东西,有1个,单元格中有一个按钮,有两个,单元格中就有两个按钮;
2.此种方法不仅适用于GridView,也适用于LayoutView视图;