0

次のようなRowDataBoundイベントハンドラーがあります。

Public Sub CustomersGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowDataBound 'RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim hyperlinkUSNHyperlink As HyperLink = CType(e.Row.FindControl("USNHyperlink"), HyperLink)
        Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList)
        If ddl.SelectedValue = "" Then 'labLastUserCode.Text = "" Then
            hyperlinkUSNHyperlink.NavigateUrl = ""
        End If
    End If
 End Sub

...そしてRowCreated次のようなイベントハンドラー:

Public Sub CustomersGridView_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowCreated 'RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList)
        ddl.Items.Add("")
        ddl.Items.Add(strUserName)
    End If
End Sub

...そしてRowUpdating次のようなイベントハンドラー:

Protected Sub GVHistoricNames_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GVClearcoreHistoricNames.RowUpdating
    Try
        Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList)
        SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = ddl.SelectedValue

    Catch ex As Exception

    Finally

    End Try
End Sub

RowUpdatingイベントハンドラーの3行目を参照してください。イベントハンドラーはイベントハンドラーの後に呼び出されるため、プロパティの値がSelectedValue正しくなることはありません。アクセスするにはどうすればよいですか?更新パラメータとして設定したい。RowDataBoundRowUpdatingSelectedValue

4

1 に答える 1

1

方法の 1 つは、実際の要求データを調べることです。たとえば、GVHistoricNames_RowUpdatingコードでは、次を使用します。

Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList)
SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = Request(ddl.UiniqueID)

ポスト データをコントロールにロードする前にコントロール値が必要な場合 (または、後のイベントでコントロールが動的に追加/バインドされる場合)、このような回避策をよく使用します。

編集

ASP.NET はControl.UniqueIdを使用して、対応する html 要素の name プロパティを表します。これ (ClientID と同様) は、通常、コントロールの ID を親 (コンテナーに名前を付けている親) の一意の ID に追加することによって構築されるため、グリッド内の複数のドロップダウン リストに対して異なる一意の ID (およびクライアント ID) を取得します (各行ネーミングコンテナとして機能します)

問題が発生する限り、作成された行にリスト項目をロードしているときに、おそらく設計時のテンプレートでドロップダウン リストを作成しています。ただし、row-created イベントが発生する前に、ドロップダウン リストは既にページ コントロール ツリーに追加されており、その POST イベントはすでに処理されています。このような場合、その時点でドロップダウン リストに選択を設定する項目はありません。したがって、問題。

于 2012-11-27T12:16:00.023 に答える