0
  • When I run the row command event from a button on a gridview row I can detect the correct value from any field found on the eventrow.

  • hidID which is a unique identifier reports correctly for each row as expected.

  • ddlVal always reports the first item in the list and not the currently selected value.

  • Can anyone offer explanation as to why a dropdownlist would not detect the currently selected value when using the command event?


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

这样做的后果是,如果您在Page_Load事件中绑定数据,则此数据在RowCommandis 触发器之前被绑定/反弹。

如果像我的情况一样,您在事件中绑定下拉列表Page_Load或在事件中绑定gridview和sqldatasource,Page_Load那么任何客户端更改都将在RowCommand触发之前丢失,因为它们将重置为初始值。

回答

在火灾后的任何事件中绑定您的网格视图,RowCommand例如OnPreRenderComplete. RowCommand这样,在触发事件之前,客户端更改仍然可用。

于 2016-10-25T13:35:31.343 回答