2012-01-12 10 views
1

データ値に基づいてgridviewセルの色を変更する必要があります。私はGridviews RowDataBoundイベントとif文(以下を参照)でdatarowビューを使用して簡単に行うことができますが、ビジネス・ルールが変更された場合には変更が必要な長い列になる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

私が見えますその条件に基づいて設定される色の列挙を作成する際に使用します。 system.Drawing.Color.Redをenum.color drvに置き換える必要があります。また、変更するフィールドを決定することもできる配列またはListまたはenumを作成する必要があります。 .config駆動型..何かのビジネスルールは何ですか? – MethodMan

答えて

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

少なくともメソッドのパラメータとして色を追加します。少なくともそれはその名前です;) –

+0

@TimSchmelter therはこのコードをリファクタリングして再利用可能なものにすることができます。それはどれくらいの再利用が予想されるかによって異なります。投稿の文脈と現在のコードを考えれば、これは最も適用可能な解決策だと思った。 –

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... 
     } 
    } 
関連する問題