【问题标题】:Get data from RowCommand从 RowCommand 获取数据
【发布时间】:2011-08-27 00:03:08
【问题描述】:

我有一个显示产品版本的网格,并有几个链接按钮,如编辑、删除、预览等。 单击编辑按钮时,我想获取产品 ID 和版本 ID 并重定向到可以编辑产品详细信息的一些 xyz.aspx 页面。
这是我的网格的外观:

<asp:GridView ID="grdBindVersion" runat="server" AutoGenerateColumns="false" 
            onrowcommand="grdBindVersion_RowCommand" >



        <RowStyle BorderStyle="Solid" BorderWidth="1px" />
        <Columns>
            <asp:BoundField datafield="HistoryId"  HeaderText="Version ID.">
                        <HeaderStyle CssClass="grid"></HeaderStyle>
            </asp:BoundField>

            <asp:BoundField datafield="Title" HeaderText="Title">
                        <HeaderStyle CssClass="grid"></HeaderStyle>
            </asp:BoundField>

             <asp:TemplateField HeaderText = "Edit">
                   <ItemTemplate>

                       <asp:LinkButton ID="Edit" runat="server" CommandArgument='<%# Container.DataItem %>'  CommandName ="Add">Edit</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Delete">
                   <ItemTemplate>
                           <asp:LinkButton ID="Delete" runat="server">Delete</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Add Sub Page">
                   <ItemTemplate>
                            <asp:LinkButton ID="AddSubPage" runat="server">Add Sub Page</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Add Rank">
                   <ItemTemplate>
                            <asp:LinkButton ID="AddRank" runat="server">Add Rank</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Approve/DisApprove">
                   <ItemTemplate>
                           <asp:LinkButton ID="ApproveStatus" runat="server">Approve/DisApprove</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Complete">
                   <ItemTemplate>
                            <asp:LinkButton ID="Complete" runat="server">Complete</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Preview">
                   <ItemTemplate>
                            <asp:LinkButton ID="Preview" runat="server">Preview</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText = "Comment">
                   <ItemTemplate>
                            <asp:LinkButton ID="Comment" runat="server">Comment</asp:LinkButton>
                   </ItemTemplate>
              </asp:TemplateField>

        </Columns>
        </asp:GridView>

我正在跟踪在 GridView 的 RowCommand 事件中单击链接按钮。 在这里,我想获取 VersionID 和 ProductID,然后重定向到另一个页面。 请帮我。 我对编码真的很陌生。 我做了一点谷歌,但没有一个解决方案对我有帮助。

【问题讨论】:

    标签: c# asp.net gridview rowcommand


    【解决方案1】:
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
            // row contains current Clicked Gridview Row
            String VersionId = row.Cells[CellIndex].Text;
            .............
            .............
            //e.CommandArgument  -- this return Data Key Value
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以将多个分配分配给 Gridview 的 OnRowCommand ...

              <asp:TemplateField HeaderText="Feedback Form">
                  <ItemTemplate>
                      <asp:LinkButton runat="server" ID="lnkFB" Enabled="true" Text="CREATE"
                              CommandArgument='<%# Eval("ApprenticeshipID") + ";" + Eval("OrganisationID") + ";" + Eval("StudentID") %>' CommandName="btnFB" 
                  </ItemTemplate>
                  <HeaderStyle HorizontalAlign="Center" />
                  <ItemStyle HorizontalAlign="Center" />
              </asp:TemplateField>
      

      并在代码隐藏中,一一提取参数并将它们分配给会话变量以供以后使用...

      string[] arg = new string[2]; //say up to 3 arguments (ie: 0,1,2)
      arg = e.CommandArgument.ToString().Split(';');
      Session["ApprenticeshipID"] = arg[0]; //I only need first argument
      GenerateFeedbackForm(Session["ApprenticeshipID"].ToString());
      

      【讨论】:

        【解决方案3】:

        将 VersionID 和 ProductID 指定为 GridView 的 DataKeyNames,然后通过 Query Strings 传递这两个值。

        【讨论】:

          【解决方案4】:

          您可以通过以下代码获取gridview_RowCommand事件的数据:

           Int32 HistoryId = Convert.ToInt32(e.Row.Cells[0].Text.ToString());
          

          您可以根据您的 GridView 项目在Cells[index] 中设置[index],然后使用获取的 HistoryId 或 ProductId 重定向到另一个页面。

          【讨论】:

          • 嗨,Saurabh。我试过你的代码,但它给出了一个错误。 System.Web.UI.WebControls.GridViewCommandEventArgs'不包含'Row'的定义,并且没有扩展方法'Row'接受'System.Web.UI.WebControls.GridViewCommandEventArgs'类型的第一个参数(你是否缺少using 指令还是程序集引用?)
          • 将 CommandArgument='' 设置为编辑按钮并使用以下代码: if (e.CommandName.Equals("Add ")) { int HistoryId = Convert.ToInt16(e.CommandArgument.ToString()); // 重定向 }
          • 这个答案无效,虽然评论是正确的,但与实际答案完全冲突。我认为需要进行一些编辑
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          • 1970-01-01
          • 2012-06-02
          • 2011-09-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多