2010-12-13 64 views
9

Tôi cần phân biệt hai ô liên tiếp.Thay đổi màu của ô trên các giá trị khác nhau - Gridview

Mỗi hàng trong một hàng, nếu chúng có giá trị khác nhau, khi kết thúc các giá trị vào chế độ xem lưới.

Vì vậy, nếu trong hàng 1, tôi có ô "ABC" và trong hàng 2 Tôi có ô "CBA".

Tôi cần tô màu từng ô bằng một màu khác.

Cách tốt nhất để làm điều đó là gì?

Trả lời

1

bạn có thể làm điều đó trên sự kiện rowdatabound của chế độ xem lưới. Giữ hàng trước trong viewstate hoặc phiên và kết hợp nó với hàng tiếp theo. Nếu nó không khớp, thay đổi màu sắc nếu không sẽ không thay đổi.

+0

Giải pháp này hoạt động, sử dụng chế độ xem để nhận giá trị hàng cuối cùng. Cảm ơn bạn. –

13

này được gọi là Conditional Formatting

Bạn có thể bật sự kiện RowDataBound trong đánh dấu

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

</asp:GridView> 

Và đặt này trong Code-Behind tập tin của bạn.

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

Giải pháp này làm việc cho tôi bằng cách tinh chỉnh mã một chút. Tôi đã không sử dụng nếu (e.Row.RowIndex == 0) như GridView của tôi luôn luôn trả về 1 hàng. Tôi cũng đã sử dụng vòng lặp for để duyệt qua tất cả các ô trong GridView của tôi –

2

nếu tôi hiểu bạn đúng, bạn muốn thay đổi màu của ô, tùy thuộc vào giá trị của ô. nếu đó là đúng, bạn có thể thử nó như thế này:

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

Thêm vào GridView của bạn trong phần html của trang OnRowDataBound = "gridView1_DataBinding". Và sau đó thêm trình xử lý sự kiện codebehind:

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

Trân trọng, Dima.

0
void gvShowFullDetail_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#AECD6F"); 
     } 
    } 
Các vấn đề liên quan