1

開発中のコントロールの 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[] { };

配列のオーバーフローはありません。これらはコンストラクターのパラメーターです。

4

2 に答える 2

1

わかりました、間違いを見つけました。私が使用する色はそのように作成されました:

System.Drawing.Color.FromArgb(value)

悪い点は、値がアルファが0に設定された色を表す整数であるということです
。この投稿のおかげで:MSDNソーシャル投稿、アルファが255に設定されていない限り、セルスタイルはARGB色をサポートしないことを学びました(RGBのみをサポートします)色)。

だから私はこれを使うのをやめました、それはうまくいきます、しかし確かにもっとエレガントな方法があります:

System.Drawing.Color.FromArgb(255, System.Drawing.Color.FromArgb(value));
于 2012-06-18T15:29:38.157 に答える
0

CellFormattingイベントを 使用してそれを行います:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
  if (this.dataGridView1.Rows[e.RowIndex].Cells["SomeStuff"].Value.ToString()=="YourCondition")
    this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
  else
    this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
于 2012-06-15T15:04:18.300 に答える