Domanda

Ho un databound GridView in asp.net 2.0 con un link per la selezione delle righe. Quando viene selezionata una riga, voglio aggiungere a livello di codice una riga della tabella sotto la riga selezionata, al fine di nidificare un'altra griglia e altri.

Sto cercando questo per un cliente e per un articolo e penso che il mio google-fu non sia forte stasera. Qualche suggerimento?

EDIT: in realtà avevo una soluzione funzionante ma Visual Studio era in qualche modo distrutto; chiudere e riaprire VS e ricostruire tutto risolto il problema ;-)

La mia soluzione è pubblicata di seguito, per favore dimmi come migliorarla se possibile. Grazie!

È stato utile?

Soluzione

Penso di averlo capito. Ecco una soluzione che sembra funzionare. Potrebbe essere migliorato utilizzando i controlli utente, ma questa è la sostanza:

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

Altri suggerimenti

Grazie per aver condiviso questo codice.

Sto provando a fare la stessa cosa (creando un gridview nidificato), ma in realtà non devi creare tu stesso il gridview. Invece, puoi semplicemente avvolgere il controllo all'interno dei tag. Ho visto un esempio qui http: //www.codeproject. com / KB / aspnet / EditNestedGridView.aspx? msg = 3089755 # xx3089755xx

Vedresti che lo sviluppatore ha annidato il controllo gv semplicemente avvolgendo il secondo controllo gridview all'interno dei tag.

Se PUOI fare quello che sta facendo con il codice, sarebbe più efficace. Non avresti bisogno di visualizzare tutti i campi selezionati !! Inoltre, visivamente saresti in grado di avere alcuni controlli aggiunti alla tua griglia vista figlio.

Ho convertito il tuo codice in vb e funziona perfettamente.

Grazie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top