来自DataView内部的回发事件

时间:2020-03-05 18:48:06  来源:igfitidea点击:

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

单击我的链接确实会引起回发,但是由于我的OnClick函数未执行,它们似乎未生成任何OnClick事件。我将AutoEventWireup设置为true,如果我将链接从GridView中移出,则它们可以正常工作。

通过创建常规锚点,将查询追加到其hrefs并在页面加载时进行检查来解决该问题,但是我希望C做繁琐的工作。有任何想法吗?

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

解决方案

回答

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

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

回答

我们处在正确的轨道上,但尝试使用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进行很多控制,而无需做很多工作来跟踪它们。

回答

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

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