Pregunta

Tengo un GridView enlazado a datos en asp.net 2.0 con un enlace de selección de fila. Cuando se selecciona una fila, quiero agregar mediante programación una fila de la tabla debajo de la fila seleccionada, para anidar otra cuadrícula et al.

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: De hecho, tenía una solución que funcionaba pero Visual Studio estaba simplificado 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!

¿Fue útil?

Solución

Creo que lo descubrí. Aquí hay una solución que parece funcionar. Se podría mejorar utilizando los controles de usuario, pero esto es lo esencial:

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

Otros consejos

Gracias por compartir este código.

Estoy tratando de hacer lo mismo (creando una vista de cuadrícula anidada), pero en realidad, no tienes que crear la vista de cuadrícula tú mismo. En su lugar, solo puede envolver el control dentro de las etiquetas. He visto un ejemplo aquí http: //www.codeproject. com / KB / aspnet / EditNestedGridView.aspx? msg = 3089755 # xx3089755xx

Vería que el desarrollador ha anidado el control de gv simplemente envolviendo el segundo control de vista de cuadrícula dentro de las etiquetas.

Si PUEDES hacer lo que él 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 tu código a vb y funciona perfectamente.

Gracias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top