1

私はテーブルにいくつかの値を持っています。行セルの「名前」が空でない場合は、背景の色を紫に変更します。

Name    ID    Customers

Niky    1     yes       // here change background to violet
        2     no
Donna   3     yes       // here change background to violet
Baka    4     no        // here change background to violet
        5     yes
        6     no

このコードを試してみましたが、うまくいきません。理由がわかりません:

 foreach (DataGridViewRow row1 in dataGridView1.Rows)
        {
            if (row1.Cells[0].Value != null)
            {
                row1.DefaultCellStyle.BackColor = Color.Violet;
            }
        }
4

4 に答える 4

1

この並べ替えコードをDataBindingCompleteイベント ハンドラー内に配置する通常の場所は、以下のようにイベントをアタッチするか、デザイナーを使用します。

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

次に、ハンドラーには次のようなものがあります。

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row1 in dataGridView1.Rows)
    {
        if (row1.Cells.Cast<DataGridViewCell>().Any(c => c.Value == null || string.IsNullOrWhiteSpace(c.Value.ToString())))
        {
            row1.DefaultCellStyle.BackColor = Color.Violet;
        }
        else
        {
            row1.DefaultCellStyle.BackColor = Color.White;
        }
    }
}

上記のコードでは、元のコードを最初のセルだけでなくすべてのセルを参照するように変更しました。


コードを CellFormatting イベントに入れることもできます。

于 2012-09-27T13:55:08.390 に答える
0

あなたがあなたのカラーコードをどこに置くかはわかりませんが、私はいつも描画セクションでそれをしました

黄色または青に依存していた最初の列を除いて、ステータスに応じて線に色を付けたここにあります-これは進行中のコードであり、整理する必要があります

  private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex > 0)
        {
            if (dataGridView1.Rows[e.RowIndex].Cells[].Value.ToString() == "good")
            {
                e.CellStyle.BackColor = Color.PaleGreen;
                    e.CellStyle.SelectionForeColor = Color.Black;
                    e.CellStyle.SelectionBackColor = Color.Wheat;

            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "warning")
            {
                e.CellStyle.BackColor = Color.LightGoldenrodYellow;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "error")
            {
                e.CellStyle.BackColor = Color.Salmon;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }

                if (e.Value.ToString() == "Yellow")
                {
                    e.CellStyle.BackColor = Color.Yellow;
                }
                else
                    if (e.Value.ToString() == "Blue")
                    {
                        e.CellStyle.BackColor = Color.LightBlue;
                    }


        }
    }

または、次のことができます。

foreach(DataGridViewRow r in dataGridView1.Rows) 
{ 
      if(!String.IsNullOrEmpty(r.Cells[0].Value.ToString()))
      { 
           r.DefaultCellStyle.BackColor = Color.Violet; 
      } 
} 

したがって、行の最初のセルがすべて空でない場合は、行を紫色にします。

于 2012-09-27T12:14:14.553 に答える
0

これを達成するための良い (ただしパフォーマンスは高くない) 方法はcell-formatting、datagridview のイベントです。MSDNでドキュメント全体を読むことができます。本質は、あなたがフォーマットイベントにサブスクライブし、これでフォーマットの問題を行うことができるということです。

このようにして、ユーザーがサイズを変更したり、スクロールしたりしても、色などが問題ないことを確認できます。

ところで:通常、自動化された描画ロジックの何かを壊すことを学んだので、描画イベントではそれをしません;)

詳細については、MSDNに cellstyles に関する記事があり、この場合はやり過ぎです。しかし、あなたは決して十分に知ることはできません:)

于 2012-09-27T12:47:24.987 に答える