【问题标题】:ASP.NET - Get DropDownList SelectedValue for current Row when using RowCommandASP.NET - 使用 RowCommand 时获取当前行的 DropDownList SelectedValue
【发布时间】:2017-03-07 10:17:04
【问题描述】:
  • 当我从 gridview 行上的按钮运行行命令事件时,我 可以从 eventrow 上找到的任何字段中检测到正确的值。

  • 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

【问题讨论】:

  • DropDownList 值是否来自数据库?我不确定,但我想,你错过了什么或者不应该有任何问题。
  • @AT-2016 是的,它们是从 sqldatasource 绑定的

标签: c# asp.net vb.net drop-down-menu rowcommand


【解决方案1】:

经过进一步诊断,我发现:

  • 行命令事件首先重新加载页面。
  • 这会触发页面生命周期。
  • RowCommand 事件在Page_Load 事件之后触发。
  • RowCommand 事件在PreRender 事件之前触发。

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

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

回答

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

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多