2012-05-11 25 views
5

Mi interfaz de usuario consiste en una vista de tabla de datos (AutoCreateColumns= false) vinculada a una lista de mis objetos comerciales. Supongamos que mi Objeto contiene 2 columnas - Precio y Cantidad - y me gustaría agregar una nueva columna en mi cuadrícula - Total - qué valor se calculará - Precio * Cantidad, PERO sin modificación de mi objeto Negocio.Columnas de cálculo en DataGridView limitadas a un objeto

¿Es posible?

+0

¿Es la rejilla editable? –

+0

Si quiere decir si es posible editar datos a través de la cuadrícula - No. – DreadAngel

Respuesta

5

Sí.

Puede agregar columnas no enlazadas a una grilla mediante programación, y rellena las celdas de la columna usando eventos.

Hay dos formas principales para poblar el contenido de las columnas no consolidados: Manipulación del RowsAdded evento o manipulación de la caso CellFormatting. Si la cuadrícula es editable CellValueChanged también necesita ser manejado. El evento CellFormatting también se puede usar para transformar los valores tal como se presentan en una celda en algo diferente al valor que realmente está almacenado en los datos que se encuentran detrás de la cuadrícula.

Código de ejemplo -

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

Más en detalle - http://www.informit.com/articles/article.aspx?p=446453&seqNum=5

+0

Gracias, este enfoque parece muy cercano a lo que necesito. Incluso la actualización de datos funciona. Muchas gracias. – DreadAngel

+1

Una pequeña mención: para el campo Valor del parámetro DataGridViewCellFormattingEventArgs solo se deben asignar ** valores de cadena ** – DreadAngel

+0

ok ... hmm ... ¿está la celda en blanco cuando es algo más? ¿No muestra la representación toString() del objeto? –

0

No, no sin editar su objeto.

Cuestiones relacionadas