有很多教程使用gridview.RowStyle这个方法来对行进行背景颜色设置,但是选中时不会生效。
但是我更推荐使用gridView.CustomDrawCell来进行设置,这样可以在选中时,也实现效果。
(调用顺序:RowStyle=>选择行的绘制(未找到对应方法)=>CustomDrawCell)
举例:
需求:需要将性别为“男”的学生所在行设置为蓝色,将性别为“女”的学生所在的行设置为红色。
数据源:
gridControl1.DataSource = new List<Student>()
{
new Student(){ ID=0,Name="张三",Sex="男"} ,
new Student(){ ID=1,Name="李四",Sex="男"} ,
new Student(){ ID=2,Name="王二",Sex="女"} ,
new Student(){ ID=3,Name="麻子",Sex="女"} ,
new Student(){ ID=4,Name="狗蛋",Sex="男"} ,
};
使用RowStyle:(由于绑定数据的缘故,无法使用GetDataRow,建议使用GetRow)
private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
{
var gridview = sender as DevExpress.XtraGrid.Views.Grid.GridView;
var rowdata = gridview.GetRow(e.RowHandle) as Student;
if (rowdata == null)
return;
if (rowdata.Sex == "男")
{
e.Appearance.BackColor = Color.SkyBlue;
}
if (rowdata.Sex == "女")
{
e.Appearance.BackColor = Color.Red;
}
}
未选中时:
选中时:
可以看到RowStyle的效果直接被覆盖了。
而,如果使用CustomDrawCell:
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
var gridview = sender as DevExpress.XtraGrid.Views.Grid.GridView;
var rowdata = gridview.GetRow(e.RowHandle) as Student;
if (rowdata == null)
return;
if (rowdata.Sex == "男")
{
e.Appearance.BackColor = Color.SkyBlue;
}
if (rowdata.Sex == "女")
{
e.Appearance.BackColor = Color.Red;
}
}
未选中时:
选中时:
还可以对选中后的效果进行处理 :
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
var gridview = sender as DevExpress.XtraGrid.Views.Grid.GridView;
var rowdata = gridview.GetRow(e.RowHandle) as Student;
if (rowdata == null)
return;
//获取选中的行号
var selectids = gridview.GetSelectedRows();
//若该单元格所在的行未选中
if (!selectids.Contains(e.RowHandle))
{
if (rowdata.Sex == "男")
{
e.Appearance.BackColor = Color.SkyBlue;
}
if (rowdata.Sex == "女")
{
e.Appearance.BackColor = Color.Red;
}
}
//若在选中行
else
{
if (rowdata.Sex == "男")
{
e.Appearance.BackColor = Color.CadetBlue;
}
if (rowdata.Sex == "女")
{
e.Appearance.BackColor = Color.Pink;
}
}
}
选中效果:
因篇幅问题不能全部显示,请点此查看更多更全内容