如何在ASP.NET GridView中按患者动态设置分组颜色?
按患者交替设置GridView行背景色问题
我有如下所示的GridView:
需要实现按患者动态交替行颜色:患者1的所有记录为灰色(不管记录条数),患者2的所有记录为蓝色,患者3的所有记录为灰色,患者4的所有记录为蓝色,以此类推。不同患者的颜色必须交替切换,不受单患者记录条数影响。
使用环境:VS 2019、C#、ASP.NET(非MVC)
我尝试了以下代码,但未实现需求:
protected void grdPatientList_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { NewMRN = e.Row.Cells[2].Text; if (counter == 1) { LastMRN = NewMRN; } if (LastMRN != NewMRN) { ColorToggle = true; mrnvalue = e.Row.Cells[2].Text; } else { ColorToggle = false; } if (ColorToggle == true) { e.Row.BackColor = System.Drawing.Color.Gray; } else { e.Row.BackColor = System.Drawing.Color.LightBlue; } LastMRN = NewMRN; counter++; } }
问题分析与解决方案
原代码的核心问题是:每次检测到患者变化时仅将ColorToggle设为true,同患者的下一行又会把ColorToggle设为false,导致同一患者的行颜色交替,不符合需求。
正确的逻辑应该是:每次切换患者时才切换颜色标记,同一患者的所有行使用同一种颜色。
修改后的代码如下:
// 声明页面级变量,用于记录上一个患者的MRN和当前颜色状态 private string _lastMRN = string.Empty; private bool _useGrayColor = true; // 初始第一个患者用灰色 protected void grdPatientList_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { string currentMRN = e.Row.Cells[2].Text; // 如果当前患者和上一个不同,切换颜色标记 if (!string.Equals(currentMRN, _lastMRN, StringComparison.Ordinal)) { _useGrayColor = !_useGrayColor; _lastMRN = currentMRN; } // 根据颜色标记设置行背景色 e.Row.BackColor = _useGrayColor ? System.Drawing.Color.Gray : System.Drawing.Color.LightBlue; } }
关键说明
- 使用页面级变量
_lastMRN和_useGrayColor,确保在RowDataBound的多次调用中保留状态 - 仅当患者MRN变化时,才切换颜色标记
_useGrayColor - 同一患者的所有行,都会使用当前的颜色标记设置背景色,保证同患者行颜色一致
- 初始
_useGrayColor设为true,第一个患者会用灰色,后续患者自动交替颜色
内容的提问来源于stack exchange,提问作者nel
相关产品推荐
相关产品推荐

