Изменение цвета ячейки при различных значениях - Gridview

Мне нужно различать две последовательные клетки.

каждый в строке, если они имеют разные значения, когда databindind значения в gridview.

Итак, если в строке 1 у меня есть ячейка "ABC", а в строке 2 у меня есть ячейка "CBA".

Мне нужно покрасить каждую ячейку другим цветом.

каков наилучший способ сделать это?

5 ответов


вы можете сделать это в событии rowdatabound gridview. Сохраните предыдущую строку в viewstate или session и сопоставьте ее со следующей строкой. Если он не совпадает, измените цвет, иначе не меняйте.


Это называется условным форматированием

Вы можете включить событие RowDataBound в разметке

<asp:GridView ID="gridview1" runat="server" OnRowDataBound="RowDataBound">

</asp:GridView>

и поместите это в свой файл с кодом.

protected void RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        if(e.Row.RowIndex == 0)     // This is row no.1
            if(e.Row.Cells[0].Text == "ABC")
                e.Row.Cells[0].BackColor = Color.Red;

        if(e.Row.RowIndex == 1)     // This is row no.2
            if(e.Row.Cells[0].Text == "CBA")
                e.Row.Cells[0].BackColor = Color.Green;
    }
}

добавить в gridview в html части страницы OnRowDataBound= "gridView1_DataBinding". А затем добавьте обработчик событий отделенного кода:

protected void gridView1_DataBinding(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType != DataControlRowType.DataRow) return;

        var c = e.Row.FindControl("IdOfControl") as Label;
        if(c != null)
        {
            if (c.Text == "ABC")
                e.Row.BackColor = GetColor("Gray");

            if (c.Text == "BCA")
                e.Row.BackColor = GetColor("Green");
        }
    }

    private Color GetColor(string color)
    {
        return Color.FromName(color);
    }

С наилучшими пожеланиями, Дима.


если я вас правильно понял, вы хотите изменить цвет ячейки в зависимости от значения это. если это правильно, вы можете попробовать вот так:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((Label)e.Row.Cells[0].FindControl("ValueHoldingControl").Text == "ABC")
        {
            //Coloring the cell
        }
    }
}

void gvShowFullDetail_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#AECD6F");
        }
    }