2011-06-14 8 views
4

J'ai une relation parent-enfant classique que je voudrais CRUD en utilisant asp:GridView contrôles. Pour CRUD le parent est facile, mais le défi est d'imbriquer un asp:GridView dans un asp:GridView qui est capable de travailler sur la relation enfant.Comment créer un GridView imbriqué pour éditer le code EF Première relation?

Pour faciliter le problème, j'ai construit un exemple. Considérez ce qui suit EF-code:

public class Context : DbContext 
{   
    public DbSet<Animal> Animals { get; set; } 
    public DbSet<Tag> Tags { get; set; } 
} 

public class Animal 
{ 
    public int AnimalID { get; set; } 
    public string Name { get; set; } 
    public virtual IEnumerable<Tag> Tags { get; set; } 
} 

public class Tag 
{ 
    public int TagID { get; set; } 
    public string Name { get; set; } 
} 

J'utilise un asp:Gridview pour afficher/modifier les Animal objectes:

<asp:GridView runat="server" DataSourceID="animalDataSource" DataKeyNames="AnimalID" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Description" HeaderText="Description" /> 
     <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" /> 
    </Columns> 
</asp:GridView> 

Le DataSource est lié avec le code derrière:

protected void DataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) 
{  
     var context = new Context(); 
     e.Context = ((IObjectContextAdapter)context).ObjectContext; } 
} 

Je voudrais inclure un asp:Gridview imbriqué comme l'une des colonnes à ajouter/supprimer/éditer Tag objets qui appartiennent à ce Animal. Comment pourrais-je y parvenir?

+0

Connexes: http://stackoverflow.com/questions/6341383/how-to-create-a-nested-gridview-to-edit-ef-code-first-relation-of-ienumerablet –

Répondre

0

BoundField affiche la valeur du champ DataSource spécifié en tant que texte. En utilisant un champ lié, nous pouvons lier les données directement en utilisant le texte de l'en-tête et le champ de données sans utiliser de contrôles. . Le TemplateField permet un mélange de balises HTML, de contrôles Web et de syntaxe de liaison de données. Nous pouvons définir nos propres contrôles asp.net dans le champ modèle. Donc, fondamentalement, vous convertissez un champ lié en une colonne de modèle. Les colonnes de modèles sont également accompagnées d'une balise d'édition qui vous offre plus que l'édition standard de cette ligne gridview ... par exemple, en mode d'édition. pour moi de choisir parmi - les possibilités sont infinies si

  • changement au champ de modèle aller modifier

  • modèle

    ajouter le contrôle de grille champ

  • ajouter Modifier/Supprimer le lien vers elle

  • aller sur la propriété de la grille imbriqué sous modèle de modifier
  • mise à jour de découverte, ligne événement databounfd etc
  • Je pense que cela vous aidera

    Dim grd1 Comme GridViewRow

     Dim gv As GridView 
         Dim l1, l2 As Label 
         Dim strsql As String 
         For Each grd1 In GridView1.Rows 
          'find controls of parent gridrow 
          l1 = grd1.FindControl("l00") 
          l2 = grd1.FindControl("l1") 
          gv = grd1.FindControl("gv1") 
          strsql = "select file_name from product_file where pname='" & l1.Text & "' and categry='" & l2.Text & "'" 
          Dim dt1 As New DataTable() 
          Dim da1 As New SqlDataAdapter(strsql, con) 
          da1.Fill(dt1) 
          gv.DataSource = dt1 
          gv.DataBind() 
         Next 
    

faites quelque chose comme ceci quand vous remplissez votre grille parentale

+0

Oui, mais le problème est remplir le gridview imbriqué. J'ai besoin de lier une entité filtrée ou quelque chose à un DataSource et l'utiliser comme entrée, mais jusqu'ici je ne l'ai pas fait fonctionner ... –

+0

On dirait un bon moyen de résoudre ceci .... faire un peu de filtrage sur un contrôle dans la grille. Cela pourrait fonctionner ... le seul problème est que j'utilise EF et pas SQL. Je vais essayer votre approche. –

Questions connexes