处理网格视图中的按钮事件

本文关键字:按钮 事件 网格 视图 处理 | 更新日期: 2023-09-27 18:20:58

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

我已经创建了一个GridView,我从数据库中填充,在我的GridView中我添加了一列按钮(详细信息),下面是问题。当我点击一个按钮时,我需要在浏览器中打开一个新的窗口(我如何从C#中做到这一点,或者只使用客户端的javascrip?),在我需要显示数据库中的详细信息后,首先我需要从按钮所在的行中获取ID,即GridView中的Column ID,那么我如何获取我点击按钮所在的ID Column的行值?

这是我的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

我真的不知道我做错了什么,当我点击一个按钮时,什么都不会发生。我试过设置断点,但我注意到断点从未发生

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

处理网格视图中的按钮事件

  <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);
 }

您有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"/>