2011-05-17 63 views
9

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

<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> 

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

回答

21
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 
    } 
} 
-1

你可以通过把下面的代码得到gridview_RowCommand事件的数据:

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

你可以根据你的GridView项Cells[index]设置[index],然后重定向到另一个网页的抓取HistoryId或产品编号。

+0

嗨Saurabh。我试过你的代码,但它给出了一个错误。 System.Web.UI.WebControls.GridViewCommandEventArgs'没有包含'Row'的定义,也没有找到接受类型'System.Web.UI.WebControls.GridViewCommandEventArgs'的第一个参数的扩展方法'Row'(是) – Sayed 2011-05-17 07:05:05

+0

将CommandArgument ='<%#DataBinder.Eval(Container.DataItem,“HistoryId”)%>'设置为编辑按钮并使用以下代码: if(e.CommandName .Equals(“Add”)) { int HistoryId = Convert.ToInt16(e.CommandArgument.ToString()); //重定向 } – Saurabh 2011-05-17 07:23:46

+1

此答案无效,虽然评论是正确的,但与实际答案完全冲突。我认为一些编辑是为了 – 2012-06-29 00:05:35

0

将VersionID和ProductID分配为GridView的DataKeyNames,然后通过查询字符串传递这两个值。

4

您可以分配多个分配到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());