2009-08-17 16 views
1

GridViewの更新時にTemplateFieldのDropDownListの値を取得する際に問題が発生しました。当初はRowCommandイベントを使用してコマンド名を確認してから、適切なタスク(更新/削除)を実行していましたが、イベントの2回発生に問題があったため、別のイベント(RowUpdating、RowDeleting)この後、FindControlは毎回nullを返します。ちょうどFYI、Gridviewは、RowEditing、RowUpdatingおよびRowDeletingイベント用のAsyncPostBackTriggersを持つUpdatePanelの内部にあります。GridViewの内部でWebコントロールを検索できない問題TemplateField

ここでのGridViewの内側に私のTemplateFieldです:ここで

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

は、私は私も(下)コントロールを見つけるために、再帰関数を使用してみました

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 

の内部で使用しているコードです。しかし、それでもnullを返しています。

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

実際には、代わりにRowCommandイベントを使用することができましたが、これを行う方法を知っていればなおさらです。 :) – Brian

答えて

1

あなただけのドロップダウンリストの新しい値が、これはすでにイベントハンドラに渡されたGridViewUpdateEventArgsオブジェクトのプロパティNewValuesであなたのために提供されているかを知りたい場合。

この例では、e.NewValues["medtype"]が更新された値になります。

すでにドロップダウンに<%# Bind(...) %>が指定されているため、ASP.NETはコントロールを見つけて新しい値を取得する作業を行います。コントロール階層を自分で行う必要はありません。

関連する問題