2

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

单击我的链接导致回发,但它们似乎不会生成任何OnClick事件,因为我的OnClick函数没有被执行。我已AutoEventWireup设置为 true,如果我将链接移出 GridView,它们可以正常工作。

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

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

4

3 回答 3

2

You're on the right track but try working with the Command Name/Argument of the LinkButton. Try something like this:

In the HeaderTemplate of the the TemplateField, add a LinkButton and set the CommandName and CommandArgument

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

Next, set the RowCommand event of the GridView

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

    }
}

This way, you have a lot of control of your LinkButtons and you don't need to do much work to keep track of them.

于 2008-09-05T10:32:34.463 回答
0

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

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

You can specify the method to call when the link is clicked.

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

The code-behind:

protected void lnkHdr1_OnCommand(object sender, CommandEventArgs e)
{
    // e.CommandArgument
}
于 2008-09-05T11:51:40.747 回答