DataView中的回发事件

时间:2008-09-05 09:41:58

标签: c# .net asp.net gridview postback

我在我的页面上显示来自DataTable的信息,并希望添加一些排序功能,这些功能有点超出了直接的列排序。因此,我一直试图将LinkBut​​tons放在我的GridView的HeaderItems中,后者返回到在重新加载页面之前更改会话信息的函数。

点击我的链接 DOES 会导致回复,但他们似乎没有生成任何 OnClick 事件,因为我的 OnClick 功能不在被执行。我将AutoEventWireup设置为true,如果我将链接移出GridView,它们可以正常工作。

我通过创建常规锚点,将查询附加到 hrefs 并在页面加载时检查它来解决这个问题,但我更喜欢C#进行繁重的工作。有什么想法吗?

更新:澄清控件的ID与 OnClick 函数名称相匹配。

3 个答案:

答案 0 :(得分:2)

你在正确的轨道上,但尝试使用LinkBut​​ton的命令名称/参数。尝试这样的事情:

在TemplateField的HeaderTemplate中,添加一个LinkBut​​ton并设置CommandName和CommandArgument

<HeaderTemplate> 
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="sort" CommandArgument="Products" Text="<%# Bind('ProductName")' />
</HeaderTemplate>

接下来,设置GridView的RowCommand事件

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "sort")
    {
        //Now sort by e.CommandArgument

    }
}

通过这种方式,您可以对LinkBut​​ton进行大量控制,并且无需做太多工作来跟踪它们。

答案 1 :(得分:0)

在ASP.Net中对动态生成的控件使用事件时要记住两件事:

  • 首先,理想情况下应在Page.Init事件处理程序中创建控件。这是为了确保在运行事件处理代码之前已经创建了控件。
  • 其次,您必须为控件ID属性分配相同的值,以便事件处理程序代码知道那是应该处理事件的控件。

答案 2 :(得分:0)

您可以指定单击链接时要调用的方法。

<HeaderTemplate>
    <asp:LinkButton
        ID="lnkHdr1"
        Text="Hdr1"
        OnCommand="lnkHdr1_OnCommand"
        CommandArgument="Hdr1"
        runat="server"></asp:LinkButton>
</HeaderTemplate>

代码隐藏:

protected void lnkHdr1_OnCommand(object sender, CommandEventArgs e)
{
    // e.CommandArgument
}