Comment lier un répéteur à une liste & lt; Person & gt; mettre également à jour les éléments liés? (2 voies)
Si j'ai une Liste < Personne > où la personne est définie par la classe
class Person
{
string Forename
{
get;set;
}
string Surname
{
get; set;
}
}
Et je la lie asp un contrôle repeater qui ressemble à ceci:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="lblForename" runat="server" Text="Forname" AssociatedControlID="txtForename" />
<asp:TextBox ID="txtForename" runat="server" Text='<%# ((Person)Container.DataItem).Forename %>' />
<br />
<asp:Label ID="lblSurname" runat="server" Text="Forname" AssociatedControlID="txtSurname" />
<asp:TextBox ID="txtSurname" runat="server" Text='<%# ((Person)Container.DataItem).Surname %>' />
<br />
</ItemTemplate>
</asp:Repeater>
Quelle est la meilleure façon d'obtenir les données que l'utilisateur tape dans le dos en objets?
J'ai pensé que le point de l'ensemble de la liaison de données est qu'il a effectivement pris en charge pour vous, mais quand je passe en revue les Repeater1.Collection d'éléments, il n'y a pas de changements. Dois-je écrire du code pour faire quelque chose le long des lignes de
//This is only intended to be pseudo code
for each item in Repeater1.Items
((Person)item.DataItem).Forename = item.FindControl("txtForname").Text;
end for
Si c'est le cas, pourquoi est-DataItem propriété toujours vide?
Informations supplémentaires:
Je suis déjà le code appelant, l'effet de la
this.Repeater1.DataSource = this.PersonList;
this.Repeater1.DataBind();
J'ai essayé d'utiliser Bind("Forename")
mais cela ne semble pas apporter de l'info de la zone de texte nouveau dans l'objet, dois-je le faire manuellement?
source d'informationauteur ilivewithian | 2009-05-14
Vous devez vous connecter pour publier un commentaire.
La réponse simple est que le contrôle Repeater ne prend pas en charge le type de liaison de données bidirectionnelle que vous êtes à la recherche pour. En plus de cela, le DataItem propriété est utilisée uniquement lors de la création de la répétition de l'élément, et après l'événement ItemDataBound, c'est rien. Si vous ne pouvez pas utiliser cette propriété pour obtenir l'objet d'origine que vous avez utilisé lors de la création de la spécifique de la répétition de l'élément après la publication (comme vous le faites dans votre pseudo-code).
Vous aurez à faire une boucle par la répétition d'éléments, comme vous l'avez suggéré (assurez-vous de vérifier que l'article est de ListItemType.Article ou AlternatingItem avant de faire quoi que ce soit) et puis d'en extraire les valeurs des zones de texte et les utiliser dans une mise à jour.
Si vous Liez le Répéteur avec la liste de personne que vous voulez
tout GetPersons() est une méthode retournant une liste des objets de la personne
vous pouvez utiliser
En outre, vous avez également besoin de lier le relais sur la Liste. Actuellement, les zones de texte sont affectés à la valeur du Prénom (ou potentailly liés si vous utilisez le
tag), mais la Répétition Conteneur n'a pas de DataItem.