GridView - 行单击 - 转到详细信息页面

时间:2012-11-27 23:37:20

标签: asp.net gridview

我将数据绑定到GridView控件。 最后一列之一具有图像URL链接。

     <asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False" Width="100%" OnRowCommand="gvccase_RowCommand" RowStyle-CssClass="rowHover">……..


<asp:TemplateField>
   <ItemTemplate>
   <asp:ImageButton ID="lnbEdit" AlternateText="edit" ImageUrl="~/images/edit_icon.gif"
                                                runat="server" CommandName="cmdEdit" />
                                        </ItemTemplate>
                                        <HeaderTemplate>
                                            Edit
                                        </HeaderTemplate>
                                    </asp:TemplateField>

当用户点击最后一列时,会调用OnRowCommnd事件(protected void gvccase_RowCommand(object sender,System.Web.UI.WebControls.CommandEventArgs e))。

如何阅读用户点击的哪一行?第一列有Case#。我想在“OnRowCommand”中阅读Case#。怎么做?

OR 我想要完成的只是......当用户点击特定行时,我想将它们带到详细信息页面。

谢谢你, 史密斯

3 个答案:

答案 0 :(得分:0)

来自http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewcommandeventargs.aspx

  void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {
      // Convert the row index stored in the CommandArgument
      // property to an Integer.
      int index = Convert.ToInt32(e.CommandArgument);

  }

答案 1 :(得分:0)

为什么不这样做:

<asp:GridView runat="server" ID="gvMajor" EmptyDataText="Your search terms did not match any records">
    <Columns>
        <asp:BoundField DataField="MajorCode" HeaderText="Major Code" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="lbModify" runat="server" CommandArgument='<%# Eval("MajorId") %>' OnClick="lbModify_Click" ImageUrl="~/Modify.png"   />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

然后在代码隐藏中:

protected void lbModify_Click(object sender, EventArgs e)
{
    var editLink = ((ImageButton)sender);
    //editLink.CommandArgument == MajorId
}

只需确保将gridview绑定到正确的数据源,如下所示:

    DataTable dt = new DataTable();
    dt.Columns.Add("MajorId");
    dt.Columns.Add("MajorCode");

    //start loop here if needed
    DataRow dr = dt.NewRow();

    dr["MajorId"] = 1;
    dr["MajorCode"] = "MAJOR CODE 1";
    dt.Rows.Add(dr);
    //end loop

    gvMajor.DataSource = dt;
    gvMajor.DataBind();

答案 2 :(得分:0)

你可以试试这个。

<强> HTML

  <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" OnRowCommand="GridView1_RowCommand">
      <Columns>
          <asp:TemplateField>
              <ItemTemplate>
                  <asp:Label ID="lblDatos" Text='<%#Eval("nombre")%>' runat="server" >
                  </asp:Label>
              </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField>
              <ItemTemplate>
                  <asp:ImageButton ID="lnbEdit" AlternateText="edit" CommandArgument='<%#Eval("link")%>'
                                            runat="server" CommandName="cmdEdit" />
              </ItemTemplate>
          </asp:TemplateField>
      </Columns>
  </asp:GridView>    

CODE BEHINDE

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
            this.llenar();

    }

    void llenar()
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("nombre");
        dt.Columns.Add("link");
       DataRow dr= dt.NewRow();
       DataRow d1 = dt.NewRow();

       dr["nombre"] = "google";
       d1["nombre"] = "amazon";
       dr["link"]  = "http://google.com";
       d1["link"] = "http://amazon.com";
       dt.Rows.Add(dr);
       dt.Rows.Add(d1);

        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();


    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "cmdEdit")
        {
            Response.Redirect(e.CommandArgument.ToString());

        }
    }
}