Frage Wie programmgesteuert eine Zeile in einem GridView einfügen?


Ich habe eine datenbankbasierte GridView in asp.net 2.0 mit einem Zeilenauswahllink. Wenn eine Zeile ausgewählt ist, möchte ich programmgesteuert eine Tabellenzeile unterhalb der ausgewählten Zeile hinzufügen, um ein anderes Raster zu verschachteln.

Ich recherchiere das für einen Kunden und für einen Artikel, und ich denke, dass mein Google-Fu heute Nacht nicht stark ist. Irgendwelche Vorschläge?

EDIT: Ich hatte tatsächlich eine funktionierende Lösung, aber Visual Studio wurde irgendwie verpfuscht; Schließen und erneutes Öffnen von VS und Neuaufbau alles hat das Problem behoben ;-)

Meine Lösung ist unten aufgeführt, bitte sagen Sie mir, wie Sie es besser machen können, wenn möglich. Vielen Dank!


5
2017-10-08 02:42


Ursprung


Antworten:


Ich denke, ich habe es herausgefunden. Hier ist eine Lösung, die zu funktionieren scheint. Es könnte mit Benutzersteuerelementen verbessert werden, aber das ist der Kern davon:

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

8
2017-10-08 02:52



Vielen Dank für die Freigabe dieses Codes.

Ich versuche das Gleiche zu tun (verschachtelte Gridview erstellen), aber Sie müssen die Gridview nicht selbst erstellen. Stattdessen können Sie das Steuerelement einfach in Tags einschließen. Ich habe hier ein Beispiel gesehen http://www.codeproject.com/KB/aspnet/EditNestedGridView.aspx?msg=3089755#xx3089755xx

Sie würden sehen, dass der Entwickler das gv-Steuerelement verschachtelt hat, indem Sie das zweite gridview-Steuerelement innerhalb von Tags umbrechen.

Wenn Sie tun können, was er tut, durch Code, wäre es effizienter. Sie müssten nicht alle ausgewählten Felder anzeigen !! Darüber hinaus können Sie visuell einige Steuerelemente zu Ihrer Kind-Gridview hinzufügen.

Ich habe Ihren Code in VB konvertiert und funktioniert perfekt.

Vielen Dank


1