来自DataView内部的回发事件
时间:2020-03-05 18:48:06 来源:igfitidea点击:
我在页面上显示来自DataTable的信息,并希望添加一些排序功能,这超出了直接列的排序范围。因此,我一直试图将LinkButtons放置在GridView的HeaderItems中,该按钮回发到在重新加载页面之前更改会话信息的函数。
单击我的链接确实会引起回发,但是由于我的OnClick函数未执行,它们似乎未生成任何OnClick事件。我将AutoEventWireup设置为true,如果我将链接从GridView中移出,则它们可以正常工作。
通过创建常规锚点,将查询追加到其hrefs并在页面加载时进行检查来解决该问题,但是我希望C做繁琐的工作。有任何想法吗?
更新:澄清控件的ID与它们的OnClick函数名称匹配。
解决方案
回答
在ASP.Net中动态生成的控件上使用事件时,要记住两件事:
- 首先,理想情况下,应在Page.Init事件处理程序中创建控件。这是为了确保在运行事件处理代码之前已经创建了控件。
- 其次,必须为控件ID属性分配相同的值,以便事件处理程序代码知道该控件应该处理事件。
回答
我们处在正确的轨道上,但尝试使用LinkButton的命令名称/参数。尝试这样的事情:
在TemplateField的HeaderTemplate中,添加一个LinkButton并设置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 } }
这样,我们就可以对LinkButton进行很多控制,而无需做很多工作来跟踪它们。
回答
我们可以指定单击链接时要调用的方法。
<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 }