開発中のコントロールの DataGridView コントロールを継承しています。私の目標は、実行時に変更できるオブジェクトの状態を表す各行の色を作成することです。私のオブジェクトは Observable デザイン パターンを実装しています。そこで、独自の DataGridViewRow クラスを開発し、Observer パターンを実装して、行にオブジェクトを監視させることにしました。このクラスには、次のメソッドがあります。
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[state];
DefaultCellStyle.ForeColor = m_ETForeColors[state];
}
今のところオブジェクトを観察できないので、色の変化をテストするために、SelectionChanged イベントで選択した行に対して UpdateColors メソッドを呼び出します。
そして今、それがうまくいかない瞬間です!以前に選択した行は (選択したときのように) 青色のままで、スクロールするとセルのテキストがレイヤー化されます。DataGridView.Refresh() を呼び出してみましたが、それも機能しません。
datagridview がデータソースにバインドされていないことを追加する必要があります。実行前にいくつの列があるかわからないため、手動でフィードします。
誰かが私が間違っていることを教えてもらえますか?
==========更新==========
これは機能します:
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = System.Drawing.Color.Yellow;
DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
}
しかし、これはうまくいきません:
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[nEtattech];
DefaultCellStyle.ForeColor = m_ETForeColors[nEtattech];
}
と :
System.Drawing.Color[] m_ETBackColors = new System.Drawing.Color[] { };
System.Drawing.Color[] m_ETForeColors = new System.Drawing.Color[] { };
配列のオーバーフローはありません。これらはコンストラクターのパラメーターです。