2013-05-28 156 views
2

我在RowDataBound上有这个代码,它交替单元格的颜色,并在单元格中添加一个onclick事件。数据是从存储过程动态获得的,所以gridview只有一个控件。 ButtonField。 我想为内部没有任何数据的单元格设置白色,我该如何实现?Gridview根据条件动态格式化

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 


    { 
     string back1 = "url('Images/GridBack1.jpg')"; 
     string back2 = "url('Images/GridBack2.jpg')"; 

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

     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      TableCell Cell = e.Row.Cells[i]; 


      // if both row and column are odd, color them black 
      // if both row and column are even, color them white 
      if (((e.Row.RowIndex % 2 == 1) && (i % 2 == 1)) || 
       ((e.Row.RowIndex % 2 == 0) && (i % 2 == 0))) 


      { 
       if (string.IsNullOrEmpty(e.Row.Cells[i].Text)) //Edit 
       { 
        e.Row.Cells[i].BackColor = Color.Blue; 
        e.Row.Cells[i].ForeColor = Color.White; 
       } 
       else 
       { 

        e.Row.Cells[i].Width = Unit.Pixel(450); 
        e.Row.Cells[i].Height = Unit.Pixel(67); 
        e.Row.Cells[i].Style.Add("background-image", back1); 
        //e.Row.Cells[i].Style.Add("width", "150px"); 
        //e.Row.Cells[i].Style.Add("word-wrap","break-word"); 
        e.Row.Cells[i].Attributes.Add("align", "center"); 
       } 



      } 
      else 
      { 

       if (string.IsNullOrEmpty(e.Row.Cells[i].Text)) //Edit 
       { 
        e.Row.Cells[i].BackColor = Color.Blue; 
        e.Row.Cells[i].ForeColor = Color.White; 
       } 
       else 
       { 
        e.Row.Cells[i].Width = Unit.Pixel(450); 
        e.Row.Cells[i].Height = Unit.Pixel(67); 
        e.Row.Cells[i].Style.Add("background-image", back2); 
        //e.Row.Cells[i].Style.Add("width", "150px"); 
        //e.Row.Cells[i].Style.Add("word-wrap", "break-word"); 
        e.Row.Cells[i].Attributes.Add("align", "center"); 
       } 


      } 
     string color = "#000000"; 
     e.Row.Cells[0].Attributes.Add("Style", "background-color: " + color + ";"); 
     e.Row.Cells[0].Width = Unit.Pixel(150); 
     e.Row.Cells[0].Height = Unit.Pixel(67); 


    } 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton _singleClickButton = (LinkButton)e.Row.Cells[0].Controls[0]; 
      string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, ""); 
      // Add events to each editable cell 
      for (int columnIndex = 2; columnIndex < e.Row.Cells.Count; columnIndex++) 
      { 
       // Add the column index as the event argument parameter 
       string js = _jsSingle.Insert(_jsSingle.Length - 2, columnIndex.ToString()); 
       // Add this javascript to the onclick Attribute of the cell 
       e.Row.Cells[columnIndex].Attributes["onclick"] = js; 
       // Add a cursor style to the cells 
       e.Row.Cells[columnIndex].Attributes["style"] += "cursor:pointer;cursor:hand;"; 
      } 
     } 
    } 


} 

回答

3

尝试将白色分配给每个单元格,然后根据条件进行覆盖。

1

您需要使用string.IsNullOrEmpty()

if(string.IsNullOrEmpty(e.Row.Cells[i].Text)) 
{ 
    e.Row.Cells[i].BackColor = Color.Blue; 
    e.Row.Cells[i].ForeColor = Color.White; 
} 

MSDN

希望工程。

+0

谢谢。你能告诉我什么时候的背景吗?我接受错误:名称'当'不存在于当前的情况下 – focus

+0

oho对不起,我在想你正在使用'foreach'循环,只是使用'if condition'而不是'when'时,希望它能起作用。 – Rahul

+0

没有改变。背景是一样的。我也试图改变你的条件背景图像,但没有运气。 – focus