更改网格视图单元格颜色的可重用方法

本文关键字:方法 颜色 网格 视图 单元格 | 更新日期: 2023-09-27 18:20:04

我需要根据数据值更改网格视图单元格的颜色。使用GridviewsRowDataBound事件中的数据行视图和if语句(见下文),我可以很容易地做到这一点,但我需要对30列执行这一操作,如果业务规则发生变化,这将非常冗长,而且很难更改。我如何将以下内容封装到一个可重用的方法中,我可以调用该方法并只传递数据列和单元格索引?

    protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.DataItem != null)
        {
            DataRowView drv = (DataRowView)e.Row.DataItem;
            int A = Int32.Parse(drv["A"].ToString());
            if (A <= 74)
            {
                e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
            } 
        }
    }

更改网格视图单元格颜色的可重用方法

public void SetColor(DataGridViewRow row, string columnName, int cellIndex)
{
    var data = (GridViewRow)row.DataItem;
    int number = Convert.ToInt32(data[columnName]);
    if (number > 74) return;
    row.Cells[cellIndex].BackColor = Color.Red;
}
protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataRowType.DataRow) return;
    SetColor(e, "A", 2);
}

弄清楚了-Meckley先生让我走上了正确的轨道,我的工作(如果不雅的话)解决方案是:

    public void SetColor2(GridViewRow row, string columnName, int cellIndex)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            int number = Convert.ToInt32(columnName);
            if (number == 0)
            {
                row.Cells[cellIndex].Text = "";
                return;
            }
            else if ((number > 0) && (number <= 74))
            {
                row.Cells[cellIndex].BackColor = System.Drawing.Color.Red;
                row.Cells[cellIndex].ForeColor = System.Drawing.Color.Black;
                return;
            }
        }
    }

用法:

    protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.DataItem != null)
        {
            DataRowView drv = (DataRowView)e.Row.DataItem;
            SetColor2(e.Row, drv["A"].ToString(), 2);
            SetColor2(e.Row, drv["B"].ToString(), 3);
            etc...
        }
    }