2009-07-07 5 views
1

Ce que je cherche est un moyen d'imiter le formulaire continu de style MS-Access au sein d'asp.net. Dans un cas particulier, je veux un contrôle, lié à une source de données qui renvoie une liste déroulante pour chaque ligne, liée à la valeur dans la source de données. Toute modification apportée à l'une des listes déroulantes "effectuerait une mise à jour de la base de données instantanément.ASP.net liste des listes déroulantes - semblable à la forme continue d'accès

J'ai à mi-chemin pour y parvenir en utilisant un contrôle de répéteur, avec DropDownList.SelectedValue affecté dans l'événement Repeater.ItemDataBound.

Mais maintenant, en supposant que j'ajouter un événement OnSelectedIndexChanged au DropDownList - comment pourrais-je interroger alors le répéteur de savoir quelle ligne j'étais (pour obtenir la valeur de clé primaire, par exemple)

Je ne suis pas Bien sûr que cela peut être fait facilement .. alors la question est de savoir ce que je devrais vraiment faire? Je ne veux pas utiliser un GridView qui m'oblige à sélectionner une ligne à éditer. Je veux juste avoir l'autoropostback des listes déroulantes pour toutes les mises à jour.

Espérons que c'est clair ?!

À la votre! : D

Répondre

0

Pour des exemples bien, disons que nous lier à une classe personnalisée appelée Record

public class Record 
{ 
    public int Id; 
    public string Value; 
} 

Si vous mettez une logique personnalisée sur l'événement Repeater.OnItemCreated vous pouvez attacher la clé primaire à l'id du liste déroulante

protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)) 
     return; 

    var dataItem = e.Item.DataItem as Record; 
    if (dataItem == null) return; 

    var dropdown = e.Item.FindControl("myDropDown") as DropDownList; 
    if (dropdown == null) return; 

    dropdown.ID = dropdown.ID + dataItem.Id; 
} 

Ensuite, sur SelectedIndexChange, vous pouvez retirer l'ID de la liste déroulante qui a déclenché l'événement. C'est vraiment un sacré bidouillage, mais cela devrait vous permettre de faire ce que vous voulez.

+0

Merci NerdFury - On dirait que c'est peut-être la meilleure option pour moi en ce moment, bien que je vais devoir contourner quelques problèmes de connexion de données .. –

+0

En outre, je ne pouvais pas trouver un moyen d'obtenir l'ID la source de données du répéteur jusqu'à l'événement itemdatabound, et là (plutôt que itemcreated) je ne pouvais pas modifier l'ID de la liste déroulante! Donc, en descendant la route de Wyatt maintenant d'un contrôle personnalisé ... –

+0

Il n'y a aucune raison que vous ne devriez pas pouvoir changer l'id de votre zone de liste déroulante dans le gestionnaire d'événement ItemDataBound. Que voyez-vous arriver qui vous fait croire cela? – NerdFury

0

Le moyen le plus simple d'y remédier serait d'imiter le style ASP.NET en mode continu Access. Ce qui serait de faire un UserControl pour gérer l'interface utilisateur au niveau des lignes, puis mettre UserControl dans un répéteur.

Questions connexes