8

興味深い問題があります。datatable を datagridview のデータ ソースとして使用しようとしています。テーブルの一部のセルに色を付けて、さまざまなことを示したいのですが、何らかの理由で色が表示されません。したがって、次のコードは無色のセルを示しています。

dataGridView1.DataSource = table;

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;

最初のフォームのロード後に表示する色しか取得できません (たとえば、OnClick イベントでセルの色を設定するなど)。ただし、以下のコードのようにビューの行と列を明示的に作成すると、色付けが機能します。

foreach (DataColumn col in table.Columns)
    dataGridView1.Columns.Add(col.ColumnName, col.ColumnName);

for (int i = 0; i < table.Rows.Count; i++)
{
    var row = table.Rows[i];
    object[] values = new object[table.Columns.Count];
    for (int x = 0; x < table.Columns.Count; x++)
        values[x] = row[x].ToString();

    dataGridView1.Rows.Add(values);
}

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;

私はこの方法でコードを持ちたくありません。ここで何が起こっているのか、私が細胞を着色するのを妨げていることを誰か知っていますか?

4

2 に答える 2

22

フォームのコンストラクター内でセルの色を設定しようとすると、データバインディングが完了する前にヒットするため、セルへの変更が固執しません (理由は聞かないでくださいDataGridView。.

これに対する最も簡単な修正は、少し後で色を設定することです。通常はDataBindingCompleteイベント ハンドラー内で行います。

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
}

これは、グリッドの静的な色付けに適しています。グリッド内の変更に従って色を変更する場合は、CellFormattingイベントを使用してセルを変更します。

于 2012-09-20T21:39:51.683 に答える
6

これは私が最近実装したものですが、役立つかどうかわかりません??

private void dgvOutstandingReports_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                int colIndex = e.ColumnIndex;
                int rowIndex = e.RowIndex;


                if (rowIndex >= 0 && colIndex >= 0)
                {
                    DataGridViewRow theRow = dgvOutstandingReports.Rows[rowIndex];


                    if (theRow.Cells[colIndex].Value.ToString() == "Daily Report")
                    {
                        theRow.DefaultCellStyle.BackColor = Color.LightYellow;
                    }
                    else if (theRow.Cells[colIndex].Value.ToString() == "Monthly Report")
                    {
                        theRow.DefaultCellStyle.BackColor = Color.LightGray;
                    }
                    else if (theRow.Cells[colIndex].Value.ToString() == "SMP Report")
                    {
                        theRow.DefaultCellStyle.BackColor = Color.Snow;
                    }
                    else if (theRow.Cells[colIndex].Value.ToString() == "Weekly Report")
                    {
                        theRow.DefaultCellStyle.BackColor = Color.Pink;
                    }
                    else if (theRow.Cells[colIndex].Value.ToString() == "Hourly Report")
                    {
                        theRow.DefaultCellStyle.BackColor = Color.LightSteelBlue;
                    }
                }
            }
于 2012-09-20T16:57:11.970 に答える