c# datagridview cell color




DataGridView行の背景色は変わりません (4)

Windowsフォームでも、ロード時の特定の条件に基づいてDGVの行の背景色を変更したいです。 しかし、私はどのDGVの列にも色の変化が見られません。 この問題を解決するにはどうすればよいですか。

private void frmSecondaryPumps_Load(object sender, EventArgs e)
{
            try
            {
                DataTable dt = DeviceData.BindData("SECONDARY_PUMPS".ToUpper());
                dataGridView1.DataSource = dt;

                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    foreach (DataGridViewColumn column in dataGridView1.Columns)
                    {
                        if (row.Cells[column.Name] != null)
                        {
                            if (row.Cells[column.Name].Value.ToString() == "ON")
                                row.DefaultCellStyle.BackColor = System.Drawing.Color.Green;

                            if (row.Cells[column.Name].Value.ToString() == "OFF")
                                row.DefaultCellStyle.BackColor = System.Drawing.Color.Red;
                        }
                    }
                }

                dataGridView1.Refresh();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

King_Robは正しいです。 私は同じ問題を抱えていたので、ここで他の提案は最適からは程遠いので私は私の実装を投稿するだけです。

デザイナーまたはコンストラクタでイベントハンドラを追加します。

this.Load += UserControl_Load; // or form or any control that is parent of the datagridview
dataGridView1.VisibleChanged += DataGridView1_VisibleChanged;

ロードイベントハンドラメソッドでフラグを追加します。

private bool _firstLoaded;
private void UserControl_Load(object sender, EventArgs e)
{
    _firstLoaded = true;
}

そして最後に、可視のイベントハンドラメソッドで:

private void DataGridView1_VisibleChanged(object sender, EventArgs e)
{
    if (_firstLoaded && dataGridView1.Visible)
    {
        _firstLoaded = false;
        // your code
    }
}

DataGridView CellFormattingイベントでBackColorを設定するのが最良の場所だと思います。

private void grid1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    DataGridViewRow row = grid1.Rows[e.RowIndex];// get you required index
    // check the cell value under your specific column and then you can toggle your colors
    row.DefaultCellStyle.BackColor = Color.Green;
}

このコードは速くて簡単で、メモリを消費しません。

たとえば、CellEndEditイベント内でこのコードを使用してください。

 `try{
 //your code
 }
 catch(Exception){
 //your exception
 }
finally{
yourDataGridView.Visible = false;
 yourDataGridView.Visible = true;
}

`


返事が遅れてすみませんが、私は今まさに同じ問題に直面しています。

私はコンストラクタで適切に動作しないことに対するいくつかの一般的な解決策を持っています - タイマーを使用

100 ms程度の短い時間に設定してください。 それではコンストラクタで

timer1.Enabled=true

そしてtimer_Tickイベントでは:

timer1.Enabled=false

and all the code that doesn't work in constructor goes here...

毎回それは私のために働きました。





datagridview