2010-12-13 18 views
9

Muszę rozróżnić dwie kolejne komórki.Zmień kolor komórki na różne wartości - Gridview

Każdy z rzędu, jeśli mają różne wartości, gdy dane są podane do widoku siatki.

Tak więc, jeśli w wierszu 1 mam komórkę "ABC", a w wierszu 2 mam komórkę "CBA".

Potrzebuję pokolorować każdą komórkę innym kolorem.

Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

1

można to zrobić w zdarzeniu rowdatabound w widoku siatki. Zachowaj poprzedni wiersz w widoku lub sesji i dopasuj go do następnego wiersza. Jeśli nie pasuje, zmień kolor, w przeciwnym razie nie zmieniaj się.

+0

To rozwiązanie działa, używając stanu widoku, aby uzyskać wartość ostatniego wiersza. Dziękuję Ci. –

13

To się nazywa Formatowanie warunkowe

Można włączyć RowDataBound wydarzeniem w znacznikach

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

</asp:GridView> 

I umieścić to w pliku kodu.

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; 
    } 
} 
+0

To rozwiązanie sprawdziło się, nieco modyfikując kod. Nie użyłem, jeśli (e.Row.RowIndex == 0) jak mój gridview zawsze zwraca 1 wiersz. Użyłem również pętli for do przechodzenia przez wszystkie komórki w moim widoku siatki –

2

jeśli dobrze cię rozumiem, chcesz zmienić kolor komórki, w zależności od jej wartości. jeśli to prawda, można spróbować go tak:

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 
     } 
    } 
} 
4

Dodaj do GridView w ramach html strony OnRowDataBound = "gridView1_DataBinding". A następnie dodaj kod obsługi zdarzenia:

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); 
    } 

Pozdrawiam, Dima.

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