0
  • グリッドビュー行のボタンから行コマンド イベントを実行すると、イベント行にある任意のフィールドから正しい値を検出できます。

  • hidIDこれは一意の識別子であり、期待どおりに各行を正しく報告します。

  • ddlVal現在選択されている値ではなく、常にリストの最初の項目を報告します。

  • コマンドイベントを使用しているときにドロップダウンリストが現在選択されている値を検出しない理由について、誰かが説明できますか?


ASP.NET

  <asp:GridView ID="gv" runat="Server" AutoGenerateColumns="False" OnRowCommand="gv_RowCommand" EnableModelValidation="False">
    <Columns>
      <asp:TemplateField HeaderText="Reason Missed" ItemStyle-CssClass="Inline" HeaderStyle-CssClass="NoSort" Visible="false">
        <ItemTemplate>
          <asp:DropDownList ID="ddl" runat="server" DataSourceID="sqldatasource" DataValueField="ID" DataTextField="Text" AppendDataBoundItems="true">
            <asp:ListItem Text="Select ..." Value="0"/>
          </asp:DropDownList>
        </ItemTemplate>
      </asp:TemplateField>
    </Columns>
  </asp:GridView>

<asp:SqlDataSource ID="sqldatasource" runat="Server" SelectCommand="sp" SelectCommandType="StoredProcedure"/>

VB

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
  Dim constring = ConfigurationManager.ConnectionStrings("Con").ConnectionString
  sqldatasource.ConnectionString = constring

  Bind_gv()
End Sub

Protected Sub gv_RowCommand(sender As Object, e As GridViewCommandEventArgs)
  Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument)
  Dim row As GridViewRow = gv.Rows(rowIndex)
  Dim ddlVal As Integer = DirectCast(row.FindControl("ddl"), DropDownList).SelectedValue
  Dim hidID As Integer = DirectCast(row.FindControl("hidID"), HiddenField).Value
  'ETC ...
End Sub
4

1 に答える 1

2

さらに診断した結果、次のことがわかりました。

  • 行コマンド イベントは、最初にページをリロードします。
  • これにより、ページのライフサイクルがトリガーされます。
  • イベントは、イベントRowCommandの後にトリガーされPage_Loadます。
  • イベントはイベントのRowCommand前にトリガーされPreRenderます。

この結果、イベントでデータをバインドすると、このデータはis トリガーPage_Loadの前にバインド/再バインドされます。RowCommand

私の場合のように、Page_Loadイベントでドロップダウンリストをバインドするか、グリッドビューと sqldatasource をバインドしている場合、クライアント側の変更は初期値にリセットされるため、トリガーされるPage_Load前に失われます。RowCommand

答え

RowCommandなどの発火後の任意のイベントでグリッドビューをバインドしますOnPreRenderCompleteRowCommandこのようにして、イベントがトリガーされるまで、クライアント側の変更を引き続き利用できます。

于 2016-10-25T13:35:31.343 に答える