Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-使用RowCommand时获取当前行的DropDownList SelectedValue_C#_Asp.net_Vb.net_Drop Down Menu_Rowcommand - Fatal编程技术网

C# ASP.NET-使用RowCommand时获取当前行的DropDownList SelectedValue

C# ASP.NET-使用RowCommand时获取当前行的DropDownList SelectedValue,c#,asp.net,vb.net,drop-down-menu,rowcommand,C#,Asp.net,Vb.net,Drop Down Menu,Rowcommand,当我从gridview行上的按钮运行行命令事件时,我 可以从eventrow上找到的任何字段中检测正确的值 hidID是一个唯一的标识符,它可以将每一行正确地报告为 预料之中 ddlVal始终报告列表中的第一项,而不是 当前选定的值 有人能解释一下为什么dropdownlist不会这样做吗 使用命令事件时是否检测当前选定的值 ASP.NET <asp:GridView ID="gv" runat="Server" AutoGenerateColumns="False" OnRowC

当我从gridview行上的按钮运行行命令事件时,我 可以从eventrow上找到的任何字段中检测正确的值

  • hidID
    是一个唯一的标识符,它可以将每一行正确地报告为 预料之中

  • ddlVal
    始终报告列表中的第一项,而不是 当前选定的值

  • 有人能解释一下为什么dropdownlist不会这样做吗 使用命令事件时是否检测当前选定的值


  • 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"/>
    

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

    • row命令事件首先重新加载页面
    • 这将触发页面的生命周期
    • row命令
      事件在
      页面加载
      事件后触发
    • row命令
      事件在
      PreRender
      事件之前触发
    这样做的后果是,如果在
    页面加载
    事件中绑定数据,则在触发
    行命令
    之前绑定/反弹该数据

    如果像我的情况一样,您正在
    页面加载
    事件中绑定dropdownlist,或者在
    页面加载
    事件中绑定gridview和sqldatasource,那么在触发
    行命令
    之前,任何客户端更改都将丢失,因为它们将重置为初始值

    回答


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

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

    • row命令事件首先重新加载页面
    • 这将触发页面的生命周期
    • row命令
      事件在
      页面加载
      事件后触发
    • row命令
      事件在
      PreRender
      事件之前触发
    这样做的后果是,如果在
    页面加载
    事件中绑定数据,则在触发
    行命令
    之前绑定/反弹该数据

    如果像我的情况一样,您正在
    页面加载
    事件中绑定dropdownlist,或者在
    页面加载
    事件中绑定gridview和sqldatasource,那么在触发
    行命令
    之前,任何客户端更改都将丢失,因为它们将重置为初始值

    回答


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

    是否
    DropDownList
    值来自数据库?我不确定,但我猜,您遗漏了什么,或者应该没有任何问题。@AT-2016是的,它们是从SQLDataSource绑定的,是来自数据库的
    DropDownList
    值吗?我不确定,但我想,您遗漏了什么,或者应该没有任何问题。@AT-2016是的,它们是从sqldatasource绑定的
    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