2009-02-12 10 views
1

J'ai cherché pendant quelques jours maintenant mais je n'ai pas trouvé de solution. Voici donc mon scénario:Utilisation de la valeur d'un DropDownList dans un GridView lors de l'insertion d'une nouvelle entrée

J'ai un DetailView avec une DataBindung à une base de données et DefaultMode réglé sur "Insert" comme une entrée-formulaire pour une nouvelle entrée db. Un champ dans cette DetailsView est un TemplateField avec un InsertItemTemplate contenant un DropDownList. Cette DropDownList est également liée à une autre SqlDataSource, en utilisant un "UserID" de paramètre select pour obtenir toutes les lignes d'une base de données pour l'utilisateur connecté. Ces lignes sont affichées dans mon DropDownList et lorsque je regarde le code source dans mon navigateur, je vois la bonne "option" -attributs avec tous ces db-ID dans leur valeur correspondante. Donc tout va bien pour le moment.

Maintenant, j'appuie sur le bouton Insert pour renvoyer mes données au serveur. Mais lorsque j'essaie d'obtenir la valeur sélectionnée de mon DropDownList dans DetailsView1_ItemInserting() avec le code suivant, j'obtiens une valeur nulle.

var list = (DropDownList)DetailsView1.Rows[0].FindControl("DropDownList1"); 
InsertEntryDataSource.InsertParameters["DropDownList1Value"].DefaultValue = list.Items[list.SelectedIndex].Value; 

Le même code fonctionne avec un autre formulaire que j'ai créé dans ce projet. La seule différence est que l'autre DropDownList est liée à un DataSource sans un paramètre select que je dois définir lors de l'exécution (l'ID utilisateur actuellement connecté).

Ma reprise a été que DropDownList est vide après la publication car la liaison de données n'a pas encore été effectuée. J'ai donc défini le paramètre select pour le SqlDataSource auquel mon DropDownList est lié dans DetailsView1_ItemInserting() - et maintenant la ligne ci-dessus a ma valeur.

MAIS: Je viens de tester la forme et une autre fois je déterminé, que quelle que soit l'entrée que je sélectionne dans mon DropDownList, je reçois toujours la valeur de la première entrée! Toute la procédure semble effacer mon SelectedIndex du DropDownList - donc maintenant j'ai une valeur à insérer au lieu de null, mais c'est la mauvaise. :-(

Ma question: Comment puis-je accéder à la valeur sélectionnée de mon DropDownList dans DetailsView1_ItemInserting() pour enregistrer dans la base de données

Merci à l'avance, Anheledir

Répondre

2

Vous pouvez utiliser cette syntaxe pour accéder au ddl sans écrire de code:

<InsertParameters> 
<asp:ControlParameter ControlID="DetailsView1$DropDownList1" Name="DropDownList1" PropertyName="SelectedValue" Type="String" /> 
</InsertParameters> 

ou de l'événement DataSource_Inserting et non l'événement DetailsView_ItemInserting u peut le faire:

e.InputParameters["InputParameterFieldName"] = ((DropDownList)DetailsView1.FindControl("DropDownList1")).SelectedValue; 

Bonne chance!

0

Êtes-vous jamais insérer? Plus d'une ligne à la fois Je voudrais sauvegarder une étape et demander pourquoi vous avez besoin d'avoir l'insert dans le cadre de la GridView lui-même et pas sa propre partie de l'interface utilisateur (avec des contrôles d'entrée et un soumettre La séparation dans l'espace met l'accent sur la séparation de la fonction - une partie pour l'insertion, une partie pour le rapport/l'affichage La méthode que vous utilisez sonne comme beaucoup de lutte pour une petite récompense

Questions connexes