如何在ASP.NET中为GridView的按钮添加事件

4

我在asp.net上有一个搜索页面,用户搜索一本书,结果会在一个网格视图中显示。我在每个网格视图结果列的右侧添加了一个按钮,并且我想为这些按钮添加事件,例如,当用户单击按钮时,该书将被借出。这是它的截图:

enter image description here

这是我的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SearchResults.aspx.cs"  Inherits="Pages_SearchResults" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
    </div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ISBN" DataSourceID="SqlDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
        <asp:BoundField DataField="ISBN" HeaderText="ISBN" ReadOnly="True" 
            SortExpression="ISBN" />
        <asp:BoundField DataField="AuthorName" HeaderText="Author Name" 
            SortExpression="AuthorName" />
        <asp:BoundField DataField="AuthorlName" HeaderText="Author Last Name" 
            SortExpression="AuthorlName" />
        <asp:BoundField DataField="ItemType" HeaderText="Item Type" 
            SortExpression="ItemType" />
        <asp:BoundField DataField="PublishYear" HeaderText="Publish Year" 
            SortExpression="PublishYear" />
        <asp:ButtonField ButtonType="Button" CommandName="LoanItem" Text="Loan Item" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [Items] WHERE ([Title] LIKE '%' + @Title + '%')">
    <SelectParameters>
        <asp:FormParameter FormField="tSearchBox" Name="Title" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
</form>
</body>
</html>

这是SearchResults页面的.cs文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Pages_SearchResults : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}

我添加了以下按钮:点击ButtonField。

enter image description here

我的问题是,如何给那些“贷款项目”按钮添加事件?我阅读了这个链接http://msdn.microsoft.com/en-us/library/bb498195.aspx但它并没有真正告诉我事件处理程序是如何添加的。感谢任何帮助。谢谢

3个回答

5

我会做的事情,也是我认为您提供的示例链接正在做的事情,就是将 RowCommand 事件添加到 GridView 中。

当您单击按钮时,将触发 RowCommand 事件,并将 CommandName 和 CommandArgument(它将是标识与所单击按钮相关联的行/记录的 ID)传递给事件处理程序。

要创建处理程序,请参阅下面的我的评论,或手动完成。在您的网格中:

OnRowCommand="Grid_RowCommand"

在您的代码后台中:

protected void Grid_RowCommand(object sender, GridViewCommandEventArgs e)
{

}

按照常规,处理程序的名称应该是[ControlID] _ [EventName],所以在我的例子中,我的网格的ID只是简单地Grid


是的,我正在尝试这样做,但例如要将事件添加到普通按钮上,我只需双击它,然后会为我创建一个函数,然后我编写该函数的代码。但是在这里,当我双击GridView或其按钮时,只会为我创建GridView1_SelectedIndexChanged函数,而其中的代码不起作用。 - yrazlik
如果您在设计视图中选择网格并查看属性窗口,应该会在顶部看到一个小闪电图标(您可能需要多次选择和取消选择网格,它可能有点奇怪)。单击闪电图标,您应该会看到所有可能事件的列表。双击右侧空白处的RowCommand事件,以自动创建处理程序。 - Jason P

3

如果您通过向导添加按钮,则每次单击行按钮时都应触发GridView1_SelectedIndexChanged。因此,您需要找出所选行并做出相应的操作。

GridViewRow row = GridView1.Rows[e.NewSelectedIndex];

请注意,如果您没有指定其他选项,可能会选择多个行。


实际上,我想看看每次单击按钮时是否会触发,并在其中编写了Response.Redirect("Default.aspx");以查看是否会发生任何事情,但它没有重定向。 - yrazlik
你是怎么添加这个按钮的?对我来说,从GridView向导中添加一个选择按钮并将名称更改为所需的名称通常更容易。如果需要帮助添加,请告诉我。 - Ted
谢谢,我是从GridView的“编辑列”属性中添加的,还有其他添加方式吗? - yrazlik
有更多的方法可以做到这一点,但我认为这是需要最少努力的方法。此外,如果您不使用默认按钮,则无法在不使用任何客户端代码向服务器警报所选行的情况下找出selectedrowindex... - Ted
实际上,我不知道,这是我第一次尝试做这样的事情。我编辑了问题以显示如何添加按钮,你能看一下并给我一个关于如何在每个结果行中添加按钮的建议吗? - yrazlik
我找到了方法,Jason P的建议很有用。也谢谢你的帮助! - yrazlik

2

变更

  <asp:ButtonField ButtonType="Button" CommandName="LoanItem" Text="Loan Item" />

为了

     <asp:TemplateField>
        <ItemTemplate>
            <asp:Button ID="Buttonid" runat="server" CommandName="LoanItem" Text="Loan Item" OnClick="Button_click_event"></asp:Button>    
        </ItemTemplate>
 </asp:TemplateField>

在代码后台

Private void Button_click_event(Object sender,EventArgs e)
{
// Click Event of Button
}

按钮未定义。 - yrazlik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接