2012-01-12 36 views
1

我需要根據數據值更改gridview單元格的顏色。我可以很容易地使用GridView RowDataBound Event和if語句中的數據行視圖來完成此操作(請參閱下文),但是我需要在30列上執行此操作,這將會非常冗長,並且如果業務規則更改,則需要更改。我如何將以下內容封裝到可以調用的可重用方法中,並只傳遞數據列和單元格索引?可重用的方法來更改gridview單元格顏色

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

我會看看根據條件創建要設置的顏色枚舉。用enum.color drv替換system.Drawing.Color.Red也必須進行更改,否則將不得不創建一個數組或列表或枚舉值,以確定哪些字段將被更改。即使它是.config驅動..例如什麼是一些業務規則.. ?? – MethodMan 2012-01-12 17:30:47

回答

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

我會將該顏色作爲參數添加到該方法中,至少因爲這是它的名稱;) – 2012-01-12 17:38:37

+0

@TimSchmelter可以將這些代碼重構爲可重用的東西。這一切都取決於預期有多少重用。鑑於該職位和當前代碼的背景,我認爲這是最適用的解決方案。 – 2012-01-12 17:48:02

1

想通了 - 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... 
     } 
    }