Comment puis-je obtenir la valeur sélectionnée de dropdownlist en mode d'édition d'un gridview?
Dans ma demande, quand je modifier une ligne dans le contrôle gridview je choisir quelques nouvelles données à partir d'un dropdownlist.
Je suis le remplissage de la liste déroulante comme ceci:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList emailsListDL = (DropDownList)e.Row.FindControl("emailsDL");
emailsListDL.DataSource = allUsersEmails;//list of strings with the emails of the users
emailsListDL.DataBind();
}
}
}
Mais lorsque j'appuie sur le bouton "modifier" à partir du modèle et entre dans le " RowUpdating de l'événement, la valeur sélectionnée de la dropdownlist est à chaque fois la première valeur de cette dropdownlist.
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList emailsListDL = (DropDownList)GridViewAdvertisers.Rows[e.RowIndex].FindControl("emailsDL");
string email = emailsListDL.SelectedValue; //the selected value is every time the first value from the dropdownlist
}
Quelqu'un a une idée?
J'ai essayé de nombreuses façons de définir la valeur sélectionnée dans le " RowDataBound de l'événement, mais avec pas de chance. J'ai essayé ceci:
1. emailsListDL.SelectedIndex = emailsListDL.Items.IndexOf(emailsListDL.Items.FindByValue(DataBinder.Eval(e.Row.DataItem, "OwnerMail").ToString()));
2. emailsListDL.SelectedValue = GridViewAdvertisers.DataKeys[e.Row.RowIndex]["OwnerMail"].ToString();
3. emailsListDL.SelectedValue = GridViewAdvertisers.Rows[e.Row.RowIndex].Cells[1].Text;
//ownerMail is a string (object) from the list of objects that I put as datasource to the gridview
Grâce,
Jeff
Mise à jour
Mon modèle d'Élément de la page aspx:
<asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"
ItemStyle-Width="150px" HeaderText="Owner Email" HeaderStyle-HorizontalAlign="Left"
HeaderStyle-BorderWidth="1px" HeaderStyle-BorderColor="#e1e1e1">
<ItemTemplate>
<asp:Label ID="LabelEmail" runat="server" Text='<%# Bind("OwnerMail")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="emailsDL" runat="server" Width="150">
</asp:DropDownList>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Font-Bold="True"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="180px" BorderWidth="1px"
BorderColor="#e1e1e1"></ItemStyle>
</asp:TemplateField>
Avez-vous DataBind votre GridView dans chaque publication ou seulement si
Oui, je suis de la liaison de données de la gridview à chaque page_Load
alors vous avez votre réponse 😉
Entourez-le à l'aide de if (!Page.IsPostBack){}
AAAA j'ai sauvé ma lifeee!! Je n'ai pas pensé que c'était stupide! merci beaucoup!
!Page.IsPostback
? Vous ne devriez le faire que lors de la première fois et APRÈS que vous avez changé de source de données.Oui, je suis de la liaison de données de la gridview à chaque page_Load
alors vous avez votre réponse 😉
Entourez-le à l'aide de if (!Page.IsPostBack){}
AAAA j'ai sauvé ma lifeee!! Je n'ai pas pensé que c'était stupide! merci beaucoup!
OriginalL'auteur Jeff Norman | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
La propriété SelectedIndex toujours par défaut la valeur 0 si vous ne définissez pas dans votre DropDownList définition.
Edit: @Tim Schmelter devrait ajouter son commentaire comme une réponse. En attendant, je vais paraphraser pour les autres lecteurs: Vous avez besoin de vérifier pour la publication (voir les commentaires ci-dessus).
OriginalL'auteur WEFX
Vous pouvez déclarer une
ComboBox mainBX = new Combobox();
et vous pouvez déclarer un événement
et ensuite, vous devez effectuer une itération foreach zone de liste déroulante dans GridView et Ajoutez cet Événement .
Que tout ce que vous devez faire ,c'est prendre le mainBX.seletedItem();
Je pense que c'est ce que vous avez besoin ,si pas des excuses .
OriginalL'auteur Burimi
Pour régler la Valeur Sélectionnée dans la
RowDataBound
-Événement, vous devez faire comme ceci:FindByValue trouve l'actuel Textvalue du Champ dans la "normale" Viewmode et définit la DropDownList avec la valeur.
Bien sûr, cela doit être encapsulé dans
Que pour votre "obtenir la Valeur à mettre à Jour"-Problème, je dois dire honnêtement j'en ai aucune idée, depuis votre approche est exactement comme la mienne, la seule différence: le mien fonctionne.
Voici mon code si ça aide:
OriginalL'auteur Dennis Röttger
J'ai eu le même problème avec une autre solution, je l'avais mise en œuvre d'échange personnalisé sur le contrôle GridView avec un pager, et dans le processus, a ajouté le RowCommand méthode, qui a été une nouvelle liaison la grille avec une nouvelle page d'index. Comme il arrive si le RowCommand méthode est également appelée lors de la mise à Jour.
Donc assurez-vous de vérifier tous les autres endroits vous pourriez être en liaison n'importe où dans votre code.
Espérons que cela aide quelqu'un d'autre.
OriginalL'auteur Brandon Søren Culley