2009-10-22 6 views
3

J'ai une table qui a deux colonnes:DataGrid ASP.NET dans un répéteur

CommunityID 
PersonID 

et une table "People" qui a (entre autres):

FirstName 
LastName 

Je voudrais pour afficher un DataGrid différent pour chaque communauté, chaque DataGrid n'ayant que les personnes qui font partie de cette communauté. Je voudrais le faire sans utiliser 4 SqlDataSources séparées. Un répéteur ressemble à un bon moyen, avec un DataGrid à l'intérieur du ItemTemplate, mais je n'arrive pas à faire la tête ou la queue pour que cela fonctionne avec les différentes valeurs pour chaque répétition.

Si quelqu'un a des suggestions sur de meilleures façons de faire, je serais très reconnaissant, car cela est l'une de mes premières incursions dans le monde pour ASP.NET

Merci,

Mike

Répondre

12

Personnellement, je ne voudrais pas utiliser un contrôle DataGrid, car il limite votre contrôle sur votre sortie et ils ont été remplacés par les nouveaux GridView & ListView contrôles (bien que DataGrid est not obsolete alors ne hésitez pas à l'utiliser si vous voulez). Vous pouvez envisager d'utiliser les alternatives, mais vous n'êtes pas obligé de le faire.

Pour faire ce que vous cherchez, vous auriez le balisage comme ce qui suit:

<asp:Repeater runat="server" ID="myRepeater" 
       onitemdatabound="Repeater_ItemDataBound"> 
<ItemTemplate> 
    <asp:DataGrid runat="server" ID="myDataGrid"> 
    </asp:DataGrid> 
</ItemTemplate> 
</asp:Repeater> 

Ensuite, vous aurez câbler le balisage avec le code-behind suivant:

protected void Page_Load(object sender, EventArgs e) 
{ 
    myRepeater.DataSource = new Object[0]; 
    myRepeater.DataBind(); 
} 

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    DataGrid dg = (DataGrid)e.Item.FindControl("myDataGrid"); 
    object o = e.Item.DataItem;// Cast the DataItem as whatever 
           // your Repeater's DataSource is 

    // ... 
    // Do whatever you need to get the 
    // data source for your DataGrid here 
    // ... 

    dg.DataSource = DataGridSourceObjectHere; 
    dg.DataBind(); 
} 

La clé est l'événement ItemDataBound du répéteur, qui est la méthode appelée chaque fois qu'une ligne répéteur est créée. C'est ici que vous pouvez lier les données de votre source DataGrid. Vous pouvez mettre toute la logique dont vous avez besoin dans cette méthode en utilisant le paramètre RepeaterItemEventArgs pour accéder à l'élément de données que vous avez lié à votre répéteur.

+0

+1 pour les connecteurs GridView et ListView –

+0

+1 bien expliqué, avec de bons exemples de code. –

+0

Je ne comprends pas vraiment. J'ai besoin de mon répéteur pour avoir un sqlDataSource comme source, qui obtient un sous-ensemble requis de communautés. Ensuite, j'ai besoin de tous les gens de cette communauté. Si je configure mon répéteur avec un SqlDataSource, une erreur se produit lorsque j'essaie de lier dans l'événement Page_Load. –

Questions connexes