複数の行と列で構成されたデータグリッドビューがあります。各行を反復処理して、特定の列の内容を確認したいと思います。その列に「NO」という単語が含まれている場合は、行全体の前景色を赤に変更したいと思います。ここに、これまでのコードをいくつか試してみましたが、うまくいきません。すべてのセルを反復処理する必要があるのか疑問に思い始めています。
コード:
foreach (DataGridViewRow dgvr in dataGridView1.Rows)
{
if (dgvr.Cells["FollowedUp"].Value.ToString() == ("No"))
{
dgvr.DefaultCellStyle.ForeColor = Color.Red;
}
}
ベストアンサー1
つなぐ行データバインド時イベントを開催して何かをする
ASPX (グリッド):
<asp:.... OnRowDataBound="RowDataBound"..../>
コードビハインド:
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex == -1)
{
return;
}
if(e.Row.Cells[YOUR_COLUMN_INDEX].Text=="NO"){
e.Row.BackColor=Color.Red;
}
}
WinFormsの場合:
hook the **DataBindingComplete** event and do stuff in it:
private void dataGridView1_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
if (e.ListChangedType != ListChangedType.ItemDeleted)
{
DataGridViewCellStyle red = dataGridView1.DefaultCellStyle.Clone();
red.BackColor=Color.Red;
foreach (DataGridViewRow r in dataGridView1.Rows)
{
if (r.Cells["FollowedUp"].Value.ToString()
.ToUpper().Contains("NO"))
{
r.DefaultCellStyle = red;
}
}
}
}