20

私は次のコードを持っています:

private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dgvStatus.Rows)
    {
        row.Cells[color.Index].Style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    }
}

背景色の列から各セルの背景色を設定しようとしています。これは機能しません。色は決して変わりません。理由について何か考えはありますか?

私は周りを見回してきましたが、有用なものは何も見つかりませんでした

4

10 に答える 10

32

新しいDataGridViewCellStyleオブジェクトを作成し、その背景色を設定してから、セルのスタイルをそれに割り当てます。

    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    style.ForeColor = Color.Black;
    row.Cells[color.Index].Style = style;
于 2013-04-19T13:36:50.783 に答える
17

私はついにそれを機能させることができました。ここにコード:

private void dgvStatus_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex != color.Index)
        return;

    e.CellStyle.BackColor = Color.FromArgb(int.Parse(((DataRowView)dgvStatus.Rows[e.RowIndex].DataBoundItem).Row[4].ToString()));
}

誰かがこれを行う方が良いことを知っている場合は、遠慮なく投稿してください。私は提案を受け入れます

于 2013-04-19T14:08:06.853 に答える
11

最初にこれがうまくいかなかった理由にまだ興味がある場合は、次のようにします。

セルのスタイルに加えた変更が表示されないのは、フォームが表示される前にこれらの変更を行ったため、無視されたためです。

ここで提案されているイベントでセル スタイルを変更するとうまくいきますが、複数回呼び出されるため、スタイルの変更が必要以上に発生するため、あまり効率的ではありません。

これを解決するには、フォームが表示されるコード内のポイントの後にスタイルを変更するか、Shown イベントをサブスクライブしてそこに変更を加えます (これは、提案されている他のイベントよりも大幅に少ない数で呼び出されるイベントです)。

于 2013-10-02T11:54:24.603 に答える
8
dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;
于 2016-02-17T15:26:42.803 に答える
1

次のことを試してください (GridView の RowDataBound メソッドで):

protected void GridViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // this will only change the rows backgound not the column header 

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].BackColor = System.Drawing.Color.LightCyan; //first col
        e.Row.Cells[1].BackColor = System.Drawing.Color.Black; // second col
    }
}
于 2013-08-22T18:45:44.633 に答える
1

示され、言及されたものと同様:

注:セルは、DataGridView コントロールが表示された後に(のみ)色が変わることを考慮してください。したがって、実用的な解決策の 1 つは、次のものを使用することです。

VisibleChanged イベント

新しい行を作成するときにスタイルを維持したい場合。以下も購読してください。

RowsAdded イベント


以下の例:

///<summary> Instantiate the DataGridView Control. </summary>
private DataGridView dgView = new DataGridView;

///<summary> Method to configure DataGridView Control. </summary>
private void DataGridView_Configuration()
{
    // In this case the method just contains the VisibleChanged event subscription.

    dgView.VisibleChanged += DgView_VisibleChanged;

    // Uncomment line bellow in case you want to keep the style when creating new rows.
    // dgView.RowsAdded += DgView_RowsAdded;
}

///<summary> The actual Method that will re-design (Paint) DataGridView Cells. </summary>
 private void DataGridView_PaintCells()
 {
     int nrRows = dgView.Rows.Count;
     int nrColumns = dgView.Columns.Count;
     Color green = Color.LimeGreen;

     // Iterate over the total number of Rows
     for (int row = 0; row < nrRows; row++)
     {
         // Iterate over the total number of Columns
         for (int col = 0; col < nrColumns; col++) 
         {
             // Paint cell location (column, row)
             dgView[col, row].Style.BackColor = green;
         }
     }
 }

///<summary> The DataGridView VisibleChanged Event. </summary>
private void DataGridView_VisibleChanged(object sender, EventArgs e)
{
    DataGridView_PaintCells();
}

/// <summary> Occurrs when a new Row is Created. </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{ 
    DataGridView_PaintCells(); 
}


最後に: DataGridView_Configuration() (メソッド) を呼び出すだけ です。
つまり、フォーム ロード イベントです。

于 2020-01-23T13:38:58.623 に答える
-1
dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;
于 2018-08-20T05:21:09.130 に答える