Bon, j'ai des problèmes pour obtenir la valeur d'un DropDownList qui se trouve dans un TemplateField lors de la mise à jour de mon GridView. À l'origine, j'utilisais l'événement RowCommand pour vérifier le nom de la commande puis exécuter la tâche appropriée (mise à jour/suppression), mais l'incident se déclenchant deux fois, je l'ai remplacé par des événements distincts (RowUpdating, RowDeleting). Après cela, FindControl renvoie null à chaque fois. Juste pour info, le gridview est à l'intérieur d'un UpdatePanel qui a un AsyncPostBackTriggers pour les événements RowEditing, RowUpdating et RowDeleting.Problème lors de la recherche du contrôle Web dans Gridview TemplateField
Voici mon TemplateField intérieur du GridView:
<asp:TemplateField HeaderText="Type">
<ItemTemplate>
<asp:Label
ID="lblMedTypeEdit"
Text='<%# Bind("medDesc") %>'
runat="server">
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
ID="ddlMedTypeEdit"
DataSourceID="srcMedTypes"
SelectedValue='<%# Bind("medtype") %>'
runat="server"
DataTextField="medDesc"
DataValueField="medCode">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
Voici le code que je utilise l'intérieur de
Protected Sub gvCurrentMeds_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvCurrentMeds.RowUpdating
Dim intRowIndex As Integer = e.RowIndex
Dim ddlMedType As DropDownList = CType(Me.gvCurrentMeds.Rows(intRowIndex).Cells(1).FindControl("ddlMedTypeEdit"),DropDownList)
End Sub
J'ai essayé également d'utiliser une fonction récursive pour trouver la commande (ci-dessous) , mais il revient toujours nul.
Public Function FindControlRecursive(ByVal root As Control, ByVal id As String) As Control
If root.ID = id Then
Return root
End If
For Each c As Control In root.Controls
Dim t As Control = FindControlRecursive(c, id)
If Not t Is Nothing Then
Return t
End If
Next
Return Nothing
End Function
En fait, j'étais en mesure d'utiliser l'événement RowCommand à la place, mais il serait toujours agréable de savoir comment faire. :) – Brian