C# DataGridView を反復処理して行の色を変更する 質問する

C# DataGridView を反復処理して行の色を変更する 質問する

複数の行と列で構成されたデータグリッドビューがあります。各行を反復処理して、特定の列の内容を確認したいと思います。その列に「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;
                }
            }
        }
    }

おすすめ記事