Frage

ich habe einen Databound-Gridview in asp.net 2.0 mit einer Zeilenwahl Link. Wenn eine Zeile ausgewählt wird, möchte ich programmatisch eine Tabellenzeile unterhalb der ausgewählten Zeile hinzufügen, um ein weiteres Gitter et al nisten.

Ich erforsche diese für einen Kunden und für einen Artikel, und ich denke, mein Google-Fu nicht stark heute Abend ist. Irgendwelche Vorschläge?

EDIT: Ich hatte tatsächlich eine funktionierende Lösung aber Visual Studio war irgendwie nutted up; Schließen und Wiedereröffnung VS und Wiederaufbau alles das Problem behoben; -)

Meine Lösung unten geschrieben wird, bitte sagen Sie mir, wie es besser, wenn möglich zu machen. Dank!

War es hilfreich?

Lösung

Ich glaube, ich es herausgefunden. Hier ist eine Lösung, die zu funktionieren scheint. Man könnte mit Benutzersteuerung verbessert, aber dies ist der Kern von ihm:

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

Andere Tipps

Vielen Dank, dass Sie diesen Code für die gemeinsame Nutzung.

Ich versuche, die gleiche Sache (Erstellen von verschachtelten Gridview) zu tun, aber tatsächlich, Sie haben nicht das Gridview selbst zu erstellen. Stattdessen können Sie einfach die Kontrolle innerhalb von Tags wickeln. Ich habe hier ein Beispiel zu sehen http: //www.codeproject. com / KB / aspnet / EditNestedGridView.aspx? msg = 3089755 # xx3089755xx

Sie würden sehen, dass der Entwickler gv Steuerung verschachtelt hat gerade durch das zweite Gridview-Steuerelement innerhalb von Tags wraping.

Wenn Sie das tun, was er von Code tut, würde es mehr effecient sein. Sie würden nicht alle ausgewählten Felder müssen angezeigt werden !! Darüber hinaus würden Sie visuell der Lage sein, einige Steuerelemente, um Ihr Kind gridview hinzugefügt haben.

Ich habe Ihren Code vb und gut funktionierend umgewandelt.

Danke

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top