2012-05-11 9 views
5

L'interfaccia utente personale è costituita da una vista datagrid (AutoCreateColumns= false) associata a un elenco di oggetti business. Supponiamo che il mio oggetto contenga 2 colonne - Prezzo e Quantità - e vorrei aggiungere una nuova colonna nella mia griglia - Totale - quale valore verrà calcolato - Prezzo * Quantità, MA senza alcuna modifica del mio oggetto Business.Colonne di calcolo in DataGridView delimitate su un oggetto

È possibile?

+0

è la griglia modificabile? –

+0

Se vuoi dire se è possibile modificare i dati attraverso la griglia - No. – DreadAngel

risposta

5

Sì.

È possibile aggiungere le colonne non associate a una griglia a livello di programmazione e si popolano le celle della colonna utilizzando gli eventi.

Ci sono due modi principali per popolare il contenuto delle colonne non associate: la manipolazione del RowsAdded evento o la manipolazione del CellFormatting evento. Se la griglia è modificabile, è necessario gestire anche CellValueChanged. L'evento CellFormatting può anche essere utilizzato per trasformare i valori come presentati in una cella a qualcosa di diverso dal valore effettivamente memorizzato nei dati che si trovano dietro la griglia.

Codice di esempio -

private void OnCellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e) 
{ 

    if (e.ColumnIndex == grid.Columns["Unbound"].Index) 
    { 
     e.FormattingApplied = true; 
     DataGridViewRow row = grid.Rows[e.RowIndex]; 
     e.Value = string.Format("{0} : {1}", 
      row.Cells["SomeColumn1"].Value, 
      row.Cells["SomeColumn2"].Value); 
    } 
} 

private void OnRowsAdded(object sender, 
    DataGridViewRowsAddedEventArgs e) 
{ 

    for (int i = 0; i < e.RowCount; i++) 
    { 
     DataGridViewRow row = grid.Rows[e.RowIndex + i]; 
     row.Cells["Unbound"].Value = string.Format("{0} : {1}", 
     row.Cells["SomeColumn1"].Value, 
     row.Cells["SomeColumn2"].Value); 
    } 
} 

Più in dettaglio - http://www.informit.com/articles/article.aspx?p=446453&seqNum=5

+0

Grazie, questo approccio sembra molto vicino a quello che mi serve. Anche l'aggiornamento dei dati funziona. Molte grazie. – DreadAngel

+1

Un po 'di menzione - per il campo Valore del parametro DataGridViewCellFormattingEventArgs dovrebbero essere assegnati solo i valori ** stringa ** – DreadAngel

+0

ok .. hmm .. la cella è vuota quando è qualcos'altro? Non mostra la rappresentazione toString() dell'oggetto? –

0

No, non senza modificare l'oggetto.

Problemi correlati