it-swarm.com.de

DataGridView ändert die Hintergrundfarbe der Zelle

Ich habe folgenden Code:

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);
    }
}

Ich versuche, die Hintergrundfarbe jeder Zelle aus der Spalte für die Hintergrundfarbe festzulegen. Das funktioniert nicht, die Farbe ändert sich nie. Eine Idee warum?

Ich habe mich umgesehen, aber nichts Nützliches gefunden

14
Rémi

Ich habe es endlich geschafft, es zum Laufen zu bringen. Hier der Code:

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()));
}

wenn jemand etwas Besseres weiß, zögern Sie nicht, es zu posten. Ich bin offen für Vorschläge

15
Rémi

Erstellen Sie einfach ein neues DataGridViewCellStyle - Objekt, legen Sie die Hintergrundfarbe fest und weisen Sie ihm den Stil der Zelle zu:

    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
    style.ForeColor = Color.Black;
    row.Cells[color.Index].Style = style;
27
Jeb

Wenn Sie immer noch interessiert sind an warum hat dies für Sie zunächst nicht funktioniert:

Der Grund, warum Sie keine Änderungen am Stil der Zelle sehen, liegt darin, dass Sie diese Änderungen vornehmen bevor das Formular angezeigt wurde und daher ignoriert werden.

Wenn Sie die Zellenstile in den hier vorgeschlagenen Ereignissen ändern, wird dies erledigt. Sie werden jedoch mehrmals aufgerufen, was dazu führt, dass Ihre Stiländerungen öfter als gewünscht ausgeführt werden und daher nicht sehr effizient sind.

Um dieses Problem zu lösen, ändern Sie entweder den Stil nach dem Punkt in Ihrem Code, in dem das Formular angezeigt wird, oder abonnieren Sie das angezeigte Ereignis und platzieren Sie Ihre Änderungen dort (dies ist ein Ereignis, das wesentlich weniger als die anderen vorgeschlagenen Ereignisse genannt wird).

9
Ysch
dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;
4
Serkan Acuner
int rowscount = dataGridView1.Rows.Count;         

for (int i = 0; i < rowscount; i++)
{            
    if (!(dataGridView1.Rows[i].Cells[8].Value == null))
    {
        dataGridView1.Rows[i].Cells[8].Style.BackColor = Color.LightGoldenrodYellow;
    }
}
2
Serkan Acuner
protected void grdDataListeDetay_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[3].Text != "0")
        {
            for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
            {
                e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
            }
        }
    }
}
0
ertugrulakdag

versuchen Sie Folgendes (in der RowDataBound-Methode von GridView): 

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
    }
}
0
Awaidus
dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;
0
sailfish009