如下图所示,只有在决策人单元格为”是“时,对应的单元格改变成为指定的颜色。
其核心很简答,主要有两方面,事件和方法。
事件
从数据库的角度来说,这里的是与否,其实在数据库中保存的是0/1,所以这里要先用一个事件将其显示为中文,当然,如果你的数据库存储的就是字符串,或者不想看分析部分,可跳过,拉到文章最后就好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
private void cardView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) { if (e.Column.Caption == "决策人") { string strValue = e.Value.ToString(); if (strValue == "1") { e.DisplayText = "是"; } else { e.DisplayText = "否"; } } } |
修改单元格的颜色,我们所需要使用到的事件是:
CustomDrawCardFieldValue
官方针对这个问题,其实有很多回答,好比这个。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private void gridView1_RowStyle(object sender, RowStyleEventArgs e) { GridView view = sender as GridView; if (e.RowHandle >= 0) { string col = view.GetRowCellDisplayText(e.RowHandle, view.Columns["Col_1"]); string compareCol = view.GetRowCellDisplayText(e.RowHandle, view.Columns["Col_2"]); e.Appearance.BackColor = Color.Green; if (col == endItemCol) { e.Appearance.BackColor = Color.Purple; } } } |
其中,view.Columns[“Col_1”],是指字段名。
这个答案出现在很多回答中,大同小异,但不得不指出的是,这个回答是至少4年前的,也就是当先可能会有一些区别。
所以,基于2023年的23.1.5,我给出的操作建议如下:
首先判断列
如一开的图中,我的列名称叫”决策人“,所以应该这样判断。
1 |
if (e.Column.Caption == "决策人") |
接着是取值
我的判断逻辑是,是则显示绿色,不是则不做任何操作。
1 2 3 4 5 6 7 8 |
string cellvalue = Convert.ToString(cardView1.GetRowCellValue(e.RowHandle, "policymaker")); if (cellvalue.Length != 0) { if (Convert.ToInt32(cellvalue) == 1) { e.Appearance.BackColor = Color.LightGreen; } } |
第一句的写法与其他答案不同,建议以我的为准,否则可能会有报错或者无法取值的情况。
通过,e.Appearance.BackColor 即可完成背景颜色的设置,当然,其他的设置差不多。以上仅供参考。
完整事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private void cardView1_CustomDrawCardFieldValue(object sender, RowCellCustomDrawEventArgs e) { if (e.Column.Caption == "决策人") { string cellvalue = Convert.ToString(cardView1.GetRowCellValue(e.RowHandle, "policymaker")); if (cellvalue.Length != 0) { if (Convert.ToInt32(cellvalue) == 1) { e.Appearance.BackColor = Color.LightGreen; } } } } |
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/12417