2009-08-17 15 views
1

Okay, also Fragen, die ich habe den Wert einer Dropdownlist bekommen, die innerhalb eines Template ist, wenn mein Gridview aktualisieren. Ursprünglich habe ich das RowCommand-Ereignis verwendet, um den Befehlsnamen zu überprüfen und dann die entsprechende Aufgabe auszuführen (update/delete), aber ich hatte Probleme, das Ereignis zweimal auszulösen, also habe ich es für separate Ereignisse (RowUpdating, RowDeleting) ausgeschaltet. Danach gibt FindControl jedes Mal null zurück. Nur zur Information: Die Gridview befindet sich in einem UpdatePanel mit AsyncPostBackTriggers für RowEditing-, RowUpdating- und RowDeleting-Ereignisse.Problem zu finden, Web-Kontrolle innerhalb von Gridview Template

Hier ist meine Template innerhalb des 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> 

Hier ist der Code ich innerhalb von

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 

mit Ich habe auch versucht, eine rekursive Funktion mit der Steuerung zu finden (siehe unten) , aber es gibt immer noch null zurück.

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 
+0

Ich war tatsächlich in der Lage, statt RowCommand Ereignis zu verwenden, aber es wäre noch schön zu wissen, wie dies zu tun. :) – Brian

Antwort

1

Wenn Sie wollen einfach nur wissen, was der neue Wert der Dropdown ist, ist dies bereits für Sie in der an den Ereignishandler übergeben GridViewUpdateEventArgs Objekt NewValues Eigenschaft zur Verfügung gestellt.

In Ihrem Beispiel e.NewValues["medtype"] sollte der aktualisierte Wert sein.

Sie haben bereits <%# Bind(...) %> im Dropdown-Menü angegeben. ASP.NET übernimmt die Aufgabe, die Steuerelemente zu finden und die neuen Werte für Sie abzurufen - Sie müssen die Steuerungshierarchie nicht selbst ermitteln.

Verwandte Themen