在gridview中处理按钮事件

时间:2015-11-06 05:10:37

标签: c# asp.net gridview

今天我有几个问题,我是ASP和C#的新手,所以我需要一些帮助,问题是下一个。 (我会尝试尽可能最具体)

我已经创建了一个从我的数据库中填充的GridView,在我的GridView中我添加了一列按钮(详细信息),这里有问题。当我点击一个按钮时,我需要在浏览器中打开一个新窗口(如何从C#中执行此操作,或者可以在客户端使用javascrip?)并且在我需要显示数据库中的详细信息后,首先我需要从按钮的行获取ID,即GridView中的列ID,那么如何在单击按钮的情况下获取ID列的行值?

这是我的ASP GridView代码

<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="false"
AllowPaging="true" CellPadding="3"
OnPageIndexChanging="grdData_PageIndexChanging" PagerSettings-Position="Top"
PagerStyle-ForeColor="Orange"
PageSize="10">
<Columns>
    <asp:BoundField DataField="id" HeaderText="ID" />
    <asp:BoundField DataField="request_type" HeaderText="RequestType"/>
    <asp:BoundField DataField="priority" HeaderText="Priority" />
    <asp:BoundField DataField="modality" HeaderText="Modality" />
    <asp:BoundField DataField="name" HeaderText="Name" />
    <asp:BoundField DataField="start_date" HeaderText="Start Date"/>
    <asp:BoundField DataField="end_date" HeaderText="End Date"  />
    <asp:BoundField DataField="hour" HeaderText="Start Hour" />
    <asp:BoundField DataField="requester" HeaderText="Requester Name" />
    <asp:TemplateField>
        <ItemTemplate>
            <asp:Button ID="Details" runat="server" 
                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
                Text="Details" CssClass="botonformulario"/>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

我在后面的代码中尝试这个,但我认为不起作用。

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = GridView1.Rows[index];
        //my code here.. 

    }

我尝试从此页面做同样的事情。

http://www.dotnetbull.com/2013/05/how-to-handle-click-event-of-linkbutton.html

并且也来自这个,

https://msdn.microsoft.com/en-us/library/bb907626.aspx

我真的不知道自己做错了什么,当我点击按钮时没有任何反应。 我尝试过断点,但我注意到断点永远不会发生

非常感谢您的时间,任何评论都会有所帮助。

2 个答案:

答案 0 :(得分:0)

你有GridView1_RowCommand处理程序,但它没有绑定在你发布的html中。您可能需要将事件GridView.RowCommand绑定到GridView

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"
AutoGenerateColumns="false"
AllowPaging="true" CellPadding="3"
OnPageIndexChanging="grdData_PageIndexChanging" PagerSettings-Position="Top"
PagerStyle-ForeColor="Orange"
PageSize="10">

一旦您触发了事件,您需要确定使用CommandName

的来源
 <asp:Button ID="Details" runat="server" CommandName="cmdDetails"
            CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
            Text="Details" CssClass="botonformulario"/>

答案 1 :(得分:0)

  <asp:GridView ID="GridView1" runat="server"
  AutoGenerateColumns="false"
  AllowPaging="true" CellPadding="3"
  OnPageIndexChanging="grdData_PageIndexChanging" PagerSettings-Position="Top"
  PagerStyle-ForeColor="Orange"
  PageSize="10">
  <Columns>
<asp:BoundField DataField="id" HeaderText="ID" />
<asp:BoundField DataField="request_type" HeaderText="RequestType"/>
<asp:BoundField DataField="priority" HeaderText="Priority" />
<asp:BoundField DataField="modality" HeaderText="Modality" />
<asp:BoundField DataField="name" HeaderText="Name" />
<asp:BoundField DataField="start_date" HeaderText="Start Date"/>
<asp:BoundField DataField="end_date" HeaderText="End Date"  />
<asp:BoundField DataField="hour" HeaderText="Start Hour" />
<asp:BoundField DataField="requester" HeaderText="Requester Name" />
<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="Details" runat="server" 
            CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
            Text="Details" OnClick="Details_Click" CommandName='<%# Eval("id")%>' CssClass="botonformulario"/>
    </ItemTemplate>
</asp:TemplateField>

protected void Details_Click(object sender, EventArgs e)
 {
          Button btn=(Button)sender;
          Response.Redirect("Details.aspx?id="+btn.CommandName);
 }