Frage

Ich möchte eine Hintergrundfarbe für bestimmte Zeile hinzufügen einer Eigenschaft des Objekts abhängig binded.

Die Lösung Ich habe (und es funktioniert) ist das Ereignis DataBindingComplete zu verwenden, aber ich glaube nicht, es ist die beste Lösung.

Hier ist das Ereignis:

    private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {

        for (int i = 0; i < this.myGrid.Rows.Count; i++)
        {
            if((this.myGrid.Rows[i].DataBoundItem as MyObject).Special)
            {
                this.myGrid.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
            }
        }
    }

Eine andere Option, die besser wäre?

War es hilfreich?

Lösung

Sie können auch einen Ereignishandler RowPostPaint anhängen

dataGridView1.RowPostPaint += OnRowPostPaint;

void OnRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    MyObject value = (MyObject) dataGridView1.Rows[e.RowIndex].DataBoundItem;
    DataGridViewCellStyle style = dataGridView1.Rows[e.RowIndex].DefaultCellStyle;

    // Do whatever you want with style and value
    ....
}

Andere Tipps

Ich habe nicht wirklich mit WinForms arbeiten, die viel, aber in ASP Sie die ‚ItemDataBound‘ Methode verwenden würden. Gibt es etwas Ähnliches in Windows Forms für ein Datagrid?

Wenn ja, in diesem Verfahren würden die Ereignisargumente das Element enthalten, das Databound war, zusammen mit der Datagrid-Reihe. So ist der allgemeine Code würde wie folgt aussehen (Syntax ist wahrscheinlich aus):

if(((MyObject)e.Item.DataItem).Special)
   e.Item.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);

Ich würde vorschlagen, ein paar Dinge:

  • Blick auf Ihre Zeilen an _OnRowDatabound Ändern
  • Sie nicht gesetzt Farbe in Ihrem Code !!! Dies wäre ein großer Fehler sein. Verwenden Sie die Attribute Eigenschaft und die CssClass gesetzt. Wag des Fingers Menschen dies immer noch tun.

Lassen Sie mich wissen, wenn Sie mit der Umsetzung kämpfen und ich werde einen Schnipsel veröffentlichen.

private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{

    foreach (DataGridViewRow row in myGrid.Rows)
    {
        if((row.DataBoundItem as MyObject).Special)
        {
            row.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top