Lié DropDownList des éléments « non utilisés » plus courant de l'article en ligne EditItemTemplate de GridView?

StackOverflow https://stackoverflow.com/questions/2250395

Question

J'ai 2 tables avec des identifiants uniques qui peuvent être mis en correspondance avec l'autre (une table provient d'une base de données en dehors de ma demande, mais a des informations sur les mêmes entités que je suis suivi). Je veux fournir une interface utilisateur pour relier « mes » enregistrements avec les ID « autres » ceux, donc je peux stocker les « autres » dans ma table pour les enregistrements correspondants. En un mot, l'élément clé de l'interface utilisateur est un dropdownlist montrant les enregistrements disponibles (c.-à-ne sont pas encore liés) de la table « autre ».

J'ai un gridview pour l'affichage de « mes » enregistrements dans chaque ligne, en plus d'une colonne indiquant quelques informations de l'enregistrement lié dans la table « autre », le cas échéant. Les données sont sur les bâtiments et les propriétés, il pourrait ressembler à ceci:

Building1   Dallas   TX    Building1_Dallas_TX
Building2   Memphis  TN    Bldg2_Memphis_TN
Building3   Denver   CO
Building4   Seattle  WA
Building5   Boston   MA    Building5_Boston_MA

où les 3 premières colonnes indiquent des informations de « ma » table, et la dernière montre l'enregistrement correspondant de la table « autre », où les dossiers ont déjà été liés, sinon un vide où aucun lien n'a été établi. Mon gridview réelle a plusieurs autres colonnes de « mon » table, mais cela suffit pour illustrer la nécessité.

Edit (non représenté) est cliqué pour une ligne, je veux être en mesure de modifier les 4 colonnes. Le premier 3 sont des zones de texte; la dernière colonne doit être un dropdownlist montrant tous les dissociées enregistrements de l'option « autre » table, Plus un « non affecté » (comme le premier élément dans la liste) afin les enregistrements peuvent être « dissociées » ou tout simplement laissé sans affectation, Plus (pour les lignes qui ont déjà un lien établi) l'élément lié (il est « utilisé », mais il doit être là-bas pour qu'ils puissent continuer à l'utiliser).

Je peux remplir le dropdownlist correctement dans le code-behind en cas de RowEditing gridview (sauf pour l'article Unassigned que j'ajouter comme ListItem dans .aspx avec l'option AppendDataBoundItems définie sur true), et je peux régler la SelectedValue correcte sur l'événement DataBound de ddl, mais quand je postback sur clique pour mettre à jour la ligne, le ddl a aucun élément dans ce plus (à l'exception de l'élément non affecté) de sorte que le lien est toujours effacé. Si je mets un lien manuellement en modifiant directement ma table, tout semble bien passer en mode Edit - le ddl a les bons éléments dans et il présélectionne l'élément correct, mais tout est perdu sur la postback de mise à jour. Je l'ai essayé réappairant ddl à différentes étapes du cycle de la page mais il est clair que je ne comprends pas tout à fait ce cycle encore assez bien parce que je ne peux pas comprendre comment obtenir l'élément sélectionné par l'utilisateur de mettre à jour ma table.

J'ai aussi essayé peuplant le ddl avec un SqlDataSource SelectCommand, mais ai pas eu de chance, y compris l'identification des dossiers actuellement liés à l'autre base de données (même si elle est disponible dans « mon » table et je le définir comme un GridView DataKey et l'ajouter comme ControlParameter dans les SelectParameters pour SqlDataSource. Sans l'enregistrement actuellement lié dans la liste des éléments de ddl, je ne peux pas garder des liens existants.

Je vais envoyer un détiens hors exemple de code pour l'instant - ce message est déjà trop longtemps! -., Dans l'espoir que la solution est évidente de ce que je viens de décrire ... Je ne pense pas que mon but est bizarre, mais je suis ouvert à être persuadé autrement

Un grand merci à l'avance!

Chris

Était-ce utile?

La solution

Ok, je ne vais pas dans les détails avec le code parce que peut-être vous déjà fait ce que je suis sur le point de proposer.

Pour la dernière colonne, la liste déroulante, vous devez exécuter une instruction SQL pour vous saisir les éléments non liés. Utilisez le "xx NOT IN". Pour l'option « Unassigned », il suffit d'ajouter un élément à la liste dans le même champ de code comme ci-dessus.

L'étape suivante consiste à gérer manuellement les événements d'édition du GridView. Insert, Update et Delete.

Je pense que vous évitera des problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top