2009-10-30 2 views
1

Comment accéder à l'élément de databound après la publication?Comment accéder à l'élément sélectionné dans une base de données dans un datalist après la publication?

J'ai un datalist, et lorsque l'utilisateur sélectionne un élément, l'événement se déclenche OnItemCommand, et mon gestionnaire d'événements semble liek ceci:

protected void dlResults_Select(object sender, DataListCommandEventArgs e) 
{ 
    MyItem item = e.Item.DataItem as MyItem; 
} 

article est toujours nul. Y a-t-il un moyen d'accéder à l'élément de databound?

+0

Vous devez redéfinir le contrôle. ViewState ne conservera pas vos éléments liés aux données. –

Répondre

0

L'approche la plus simple que j'ai trouvée à ce type de problème est d'ajouter un événement javascript au contrôle qui met à jour un contrôle d'entrée (type = hidden) avec la valeur sélectionnée du contrôle. Si vous ajoutez l'attribut runat = server à la balise, vous pouvez accéder au côté du serveur de contrôle d'entrée et en lire la valeur. Le postback devrait se déclencher après l'événement javascript, donc tout le reste devrait fonctionner normalement pour vous.

1

La propriété DataItem n'est pas null lorsqu'elle est accessible via l'événement ItemDataBound. Si vous avez besoin d'un ID pour modifier votre objet/enregistrement, vous pouvez définir la propriété DataKeyField de DataList pour remplir la collection DataKeys.

<asp:DataList ID="DataList1" runat="server" DataKeyField="id"> 
</asp:DataList> 

Vous pouvez ensuite utiliser l'identifiant de votre événement OnItemCommand instancier l'objet désiré, ou en tant que paramètre à une requête de base de données.

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]); 
    MyItem item = new MyItem(id); 
} 
0

Une réponse appropriée à votre question ne peut être fournie qu'après avoir pris connaissance de la manière dont vous effectuez la liaison de données. Procédez-vous à la liaison de données à partir du code en appelant la méthode .DataBind() du datalist ou fournissez-vous une source de données au datalist à partir duquel effectuer la liaison. La raison pour laquelle je pose cette question est que si vous utilisez la méthode .DataBind() du datalist à partir du code pour lier le datalist, vous devrez l'appeler à chaque publication pour vous assurer que le datalist reçoit à nouveau la base de données. Sinon, après le retour, vous verrez que le datalist apparaît vide. Dans le cas où vous fournissez une source de données au datalist à partir de, en utilisant sa propriété DataSource ou DataSourceId, la liaison de données du datalist sur chaque publication est prise en charge par le framework, vous n'avez pas à vous en préoccuper.

Mais d'après l'apparence des choses, je crois que vous obtenez la valeur nulle parce que vous essayez d'obtenir la valeur de l'élément de données à un mauvais endroit. Rappelez-vous que vous devrez suivre le bon cycle de vie d'un contrôle pour le faire fonctionner comme vous le souhaitez.

Je peux fournir une meilleure réponse si vous pouvez répondre à mes questions ci-dessus. Votre déclaration actuelle semble insuffisante pour fournir une réponse pertinente.

Questions connexes