私は c# の経験がなく、コンテンツに基づいてグリッドビュー セルの背景色を変更しようとしています。同じ行の複数のセルを異なる色にできるようにしたい。グリッドビューは正常に生成されますが、色は適用されません。以下のメソッドを使用して、グリッドビューの作成時に呼び出しています。
protected void cell_Color()
{
for (int r = 0; r < gv.Rows.Count; r++)
{
for (int c = 0; c < gv.Columns.Count; c++)
{
switch (gv.Rows[r].Cells[c].Text)
{
case "A+":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(0, 255, 0);
break;
case "A":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(100, 255, 100);
break;
case "B":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(0, 0, 255);
break;
case "C":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(255, 255, 25);
break;
case "D":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(128, 64, 0);
break;
case "F":
gv.Rows[r].Cells[c].BackColor = Color.FromArgb(255, 0, 0);
break;
}
}
}
}
Edit1: 助けてくれてありがとう。セルが更新されない理由の 1 つは、グリッドビュー内の何かが完全一致を妨げているためであることがわかりました。それが何であるかを見つけることができないので、探しているものの文字列を作成し、string.contain チェックを使用して、それらが真であるかどうかを確認しました。これは一致を見つけるのに役立ちましたが、最初の列のみを更新しています。私は自動生成された列を使用しているため、gv.columns.count を使用できません。代わりに、グリッドビューに使用する列が最も多いため、12 を選択しました。コードは次のようになります
protected void RowDataBound(Object sender, GridViewRowEventArgs e)
{
string sAplus = "A+";
string sA = "A";
string sB = "B";
string sC = "C";
string sD = "D";
string sF = "F";
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int r = 1; r <= gv.Rows.Count; r++)
{
if (e.Row.RowIndex == r)
{
string grade = e.Row.Cells[0].Text;
bool bAplus = grade.Contains(sAplus);
bool bA = grade.Contains(sA);
bool bB = grade.Contains(sB);
bool bC = grade.Contains(sC);
bool bD = grade.Contains(sD);
bool bF = grade.Contains(sF);
if (bAplus == true)
e.Row.Cells[0].BackColor = Color.FromArgb(0, 255, 0);
if (bA == true)
e.Row.Cells[0].BackColor = Color.FromArgb(100, 255, 100);
if (bB == true)
e.Row.Cells[0].BackColor = Color.FromArgb(0, 0, 255);
if (bC == true)
e.Row.Cells[0].BackColor = Color.FromArgb(255, 255, 25);
if (bD == true)
e.Row.Cells[0].BackColor = Color.FromArgb(128, 64, 0);
if (bF == true)
e.Row.Cells[0].BackColor = Color.FromArgb(255, 0, 0);
}
}
}
}
自動生成された列を使用しているため、セルの変数を作成して for(int c = 0; c> gv.Columns.Count; c++) のようにループすると、指定された引数が範囲外だったと言われます有効な値。