Question

J'ai un GridView basé sur les données dans asp.net 2.0 avec un lien de sélection de rangée. Lorsqu'une ligne est sélectionnée, je souhaite ajouter par programme une ligne de tableau sous la ligne sélectionnée, afin d'imbriquer une autre grille et autres.

Je recherche ceci pour un client et pour un article, et je pense que mon google-fu n'est pas fort ce soir. Des suggestions?

EDIT: J'avais une solution qui fonctionnait, mais Visual Studio était en quelque sorte taré; fermer et rouvrir VS et reconstruire tout a résolu le problème ;-)

Ma solution est affichée ci-dessous. Dites-moi comment l’améliorer si possible. Merci!

Était-ce utile?

La solution

Je pense que je l'ai compris. Voici une solution qui semble fonctionner. Il pourrait être amélioré en utilisant les contrôles utilisateur, mais voici l'essentiel:

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

Autres conseils

Merci d'avoir partagé ce code.

J'essaie de faire la même chose (créer un gridview imbriqué), mais en réalité, vous n'avez pas à créer le gridview vous-même. Au lieu de cela, vous pouvez simplement envelopper le contrôle dans des balises. J'ai vu un exemple ici http: //www.codeproject. com / KB / aspnet / EditNestedGridView.aspx? msg = 3089755 # xx3089755xx

Vous constaterez que le développeur a imbriqué le contrôle gv simplement en encapsulant le deuxième contrôle gridview dans des balises.

Si vous POUVEZ faire ce qu’il fait par code, ce serait plus efficace. Vous n'avez pas besoin d'afficher tous les champs sélectionnés! De plus, visuellement, vous pourrez ajouter des contrôles à votre gridview enfant.

J'ai converti votre code en vb et je fonctionne parfaitement.

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top