2008-10-08 15 views
5

tengo un GridView de datos en asp.net 2.0 con un enlace de selección de fila. Cuando se selecciona una fila, quiero agregar programáticamente una fila de la tabla debajo de la fila seleccionada, para anidar otra cuadrícula, etc.¿Cómo insertar mediante programación una fila en un GridView?

Estoy investigando esto para un cliente y para un artículo, y creo que mi google-fu no es fuerte esta noche. ¿Alguna sugerencia?

EDITAR: En realidad tenía una solución de trabajo, pero Visual Studio estaba loca de alguna manera; cerrar y volver a abrir VS y reconstruir todo solucionó el problema ;-)

Mi solución se publica a continuación, por favor dígame cómo mejorarla si es posible. ¡Gracias!

Respuesta

8

Creo que lo descubrí. Aquí hay una solución que parece funcionar. Podría mejorarse usando los controles de usuario, pero este es el quid de la cuestión:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && 
     (e.Row.RowState & DataControlRowState.Selected) > 0) 
    { 
     Table tbl = (Table)e.Row.Parent; 
     GridViewRow tr = new GridViewRow(e.Row.RowIndex + 1, -1, 
      DataControlRowType.EmptyDataRow, DataControlRowState.Normal); 
     TableCell tc = new TableCell(); 
     tc.ColumnSpan = GridView1.Columns.Count; 
     tc.Controls.Add(
      makeChildGrid(Convert.ToInt32(
       ((DataRowView)e.Row.DataItem)["ROW_ID_FIELD"]))); 
     tr.Cells.Add(tc); 
     tbl.Rows.Add(tr); 
    } 
} 

protected GridView makeChildGrid(int id) 
{ 
    GridView gv = new GridView(); 
    SqlDataSource sqlds = new SqlDataSource(); 
    sqlds.DataSourceMode = SqlDataSourceMode.DataSet; 
    sqlds.ConnectionString = SqlDataSource1.ConnectionString; 
    sqlds.SelectCommand = "SELECT * from MY_TABLE_NAME " + 
     "WHERE KEY_FIELD = " + id.ToString(); 
    DataView dv = (DataView)sqlds.Select(DataSourceSelectArguments.Empty); 
    gv.DataSource = dv; 
    gv.DataBind(); //not sure this is necessary...? 
    return gv; 
} 
1

Gracias por compartir este código.

Estoy tratando de hacer lo mismo (creando una vista de grilla anidada), pero en realidad, usted no tiene que crear la grilla de vista usted mismo. En cambio, solo puede ajustar el control dentro de las etiquetas. He visto un ejemplo aquí http://www.codeproject.com/KB/aspnet/EditNestedGridView.aspx?msg=3089755#xx3089755xx

Verás que el desarrollador ha anidado el control de gv con solo ajustar el segundo control de gridview dentro de las etiquetas.

Si PUEDE hacer lo que está haciendo por código, sería más eficiente. ¡No necesitarías mostrar todos los campos seleccionados! Además, visualmente podría tener algunos controles agregados a la vista de cuadrícula de su hijo.

He convertido su código a vb y funciona perfectamente.

Gracias

Cuestiones relacionadas