【问题标题】:ASP.NET GridView Button EventASP.NET GridView 按钮事件
【发布时间】:2026-01-15 03:50:01
【问题描述】:

我正在尝试在网格视图中触发按钮事件。我用以下代码创建了一个gridview:

<asp:GridView id="ItemsGrid2" BorderColor="black" CellPadding="3" 
                BorderWidth="1" HeaderStyle-BackColor="DarkSlateGray" HeaderStyle-ForeColor="White"
            AutoGenerateColumns="false" AllowSorting="true" OnSortCommand="Sort_Grid" 
                runat="server" align="center" Font-Name="Verdana" Font-Size="8">
                <Columns>
                <asp:BoundField DataField="Title" HeaderText="Title"/>
                <asp:BoundField DataField="Year" HeaderText="Year" />
                <asp:BoundField DataField="Score" HeaderText="Score" />
                <asp:BoundField DataField="Genre" HeaderText="Genre" />
                <asp:HyperLinkField HeaderText="Link" DataTextField="Link" DataNavigateUrlFields="Link"/>
                <asp:TemplateField HeaderText="Seen">
                    <ItemTemplate>
                        <asp:Button runat="server" Text="Seen" OnClick="Save_Check"/>
                    </ItemTemplate>
                </asp:TemplateField>
                </Columns>
            </asp:GridView>

我将数据与数据集绑定,这一切都很好。 但现在我试图触发 Save_Check 事件,它看起来像:

public void Save_Check(object sender, EventArgs e)
        {
           string test = "test"; 
        }

但是我总是收到错误消息:“应用程序中的服务器错误,重新发布时的参数错误”。 (它是荷兰语,所以我尽量翻译清楚)。

有什么想法吗?我不是asp.net方面的专家。我通常只在 c# 或 webservices 中编写代码,有时也使用 silverlight。但这次我想用 asp.net 来做。

【问题讨论】:

    标签: asp.net gridview button events


    【解决方案1】:

    您应该在 GridView 中添加一个 OnRowCommand 事件,然后实现一个事件处理程序。在你的 Button 而不是实现 OnClick 你应该可选地只提供属性 CommandName 和 CommandArgument 即:

    <asp:Button ID="Button1" runat="server" Text="Seen" CommandName="Seen" CommandArgument='<%#Eval("RecordID") %>'/>
    

    然后您可以在 OnRowCommand 事件处理程序中添加您的代码

    string test = "test";
    

    按钮的点击总是会触发 OnItemCommand 事件,即使你没有指定 CommandName 属性,但是这允许你在一行上有多个按钮,这样每个按钮将执行不同的功能。 CommandArgument 允许您为功能提供参数。例如,如果你想传递你看到的人的 ID,你可以传递 CommandArgument="

    【讨论】:

      【解决方案2】:

      我试过你说的。以一种非常简单的方式。我注意到 gridview 没有 onItemCommand 事件触发器,但我只是使用了 datagrid。

      <asp:DataGrid ID="ItemsGrid" AutoGenerateColumns="false" runat="server" OnItemCommand="Save_Check">
                      <Columns>
                          <asp:BoundColumn DataField="Title" HeaderText="Title"></asp:BoundColumn>
                          <asp:ButtonColumn DataTextField="Year"></asp:ButtonColumn>
                      </Columns>
                  </asp:DataGrid>
      

      这样就可以了。但是,如果我创建一个带有按钮的模板列,它会给出相同的错误。另外..如果我将按钮列的按钮类型更改为“按钮”,它再次给出相同的错误。它适用于链接按钮......有什么区别?我真的很想有一个按钮,因为链接看起来很丑;)

      干杯

      【讨论】:

      • 对不起,我错误地给了你关于如何在 DataList 上实现它的建议。请检查我修改后的答案,您应该使用 OnRowCommand 而不是 OnItemCommand