Domanda

Vorrei aggiungere un backcolor per una linea specifica a seconda della proprietà dell'oggetto associato.

La soluzione che ho (e funziona) è usare l'evento DataBindingComplete ma non credo sia la soluzione migliore.

Ecco l'evento:

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

Qualche altra opzione che sarebbe meglio?

È stato utile?

Soluzione

Puoi anche collegare un gestore eventi a RowPostPaint:

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
    ....
}

Altri suggerimenti

Non lavoro molto con WinForms, ma in ASP useresti il ??metodo 'ItemDataBound'. Esiste qualcosa di simile nei moduli di Windows per un DataGrid?

In tal caso, in tale metodo, gli argomenti dell'evento conterrebbero l'elemento che era databound, insieme alla riga DataGrid. Quindi il codice generale sarebbe simile a questo (la sintassi è probabilmente disattivata):

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

Vorrei suggerire alcune cose:

  • guarda come modificare le tue righe su _OnRowDatabound
  • Non impostare il colore nel tuo codice !!! Questo sarebbe un grosso errore. Utilizzare la proprietà attributi e impostare cssclass. Scossa del dito verso le persone che ancora lo fanno.

Fammi sapere se hai difficoltà con l'implementazione e posterò uno snippet.

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);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top