现在我得到了这个gridview,我需要标题可点击,然后事件开始(类似OnClickHeader =“header_ClickEvent”?)当然有一个SortExpression元素,它可以对网格进行排序,但我想能够启动任何事件,例如点击按钮时。
我在asp中找不到任何解决方案:BoundField也没有asp:TemplateField ...... 我认为超链接可以解决问题,但这有点为时过早。 此外,当使用TemplateField时,我发现很难用数据填充列。 有人能给我带来解决方案吗?
Gridview:
<asp:GridView CssClass="gridview" ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Student_key" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" PagerSettings-Visible="false" PageSize="14">
<HeaderStyle CssClass="headerstyle" />
<RowStyle CssClass="rowstyle"/>
<AlternatingRowStyle CssClass="altrowstyle" />
<Columns>
<asp:BoundField DataField="Studentnumber" HeaderText="Studentnummer" >
<HeaderStyle CssClass="header100" />
</asp:BoundField>
<asp:BoundField DataField="Prefix" HeaderText="Voorletters" >
<HeaderStyle CssClass="header75" />
</asp:BoundField>
<asp:BoundField DataField="prename" HeaderText="Voornaam" SortExpression="Voornaam">
<HeaderStyle CssClass="header75" />
</asp:BoundField>
<asp:BoundField DataField="nickname" HeaderText="Roepnaam" >
<HeaderStyle CssClass="header100" />
</asp:BoundField>
<asp:BoundField DataField="insertion" HeaderText="Tussenvoegsel" >
<HeaderStyle CssClass="header100" />
</asp:BoundField>
<asp:BoundField DataField="surname" HeaderText="Achternaam">
<HeaderStyle CssClass="header100" />
</asp:BoundField>
<asp:CommandField SelectText="show results" ShowSelectButton="True" >
<HeaderStyle CssClass="header100" />
</asp:CommandField>
</Columns>
<EmptyDataTemplate >There are no results shown, please try again.</EmptyDataTemplate>
</asp:GridView>
答案 0 :(得分:1)
答案 1 :(得分:1)
好笑,我今天遇到了同样的问题,和你一样,我发现了上面的解决方案。
这是我很满意的事情。
首先,您需要使用CSS Friendly Control adapters。如果您使用的是GridView,并且您有任何类,那么还有很多其他好处。在这种情况下需要它,因为它根据排序属性向标头添加了必要的类,而ASP.NET则没有。
您无需更改任何代码即可添加适配器,只需将其DLL放入bin文件夹,将.browser
文件放在App_Browsers
文件夹中(您可能需要)为此添加。)
(在一个侧节点上,我实际上发现这些适配器打破了我的一些其他控件布局(它们是针对默认的ASP.NET标记设置的),所以我删除了除GridView之外的所有适配器标签。)
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.GridView"
adapterType="CSSFriendly.GridViewAdapter" />
</controlAdapters>
</browser>
现在,要获得好处。在document.ready事件中,这一点jQuery将产生预期的效果。
// Make the entire column header clickable, not just the text
$('#your-table thead th.sortable').each( function() {
var href = $('a', this).attr('href');
$(this).click( new Function(href.replace(/^javascript:/, '')) );
$('a', this).attr('href', 'javascript: return false;');
});
基本上,它从ASP.NET放置在标题中的链接中删除了javascript,看起来像这样
<a href="javascript:__doPostBack('ctl00$Form$id','Sort$Quantity')">Qty</a>
并将代码放入标题的click
事件中。然后它禁用链接,以便事件冒泡不会导致冲突。
当然,您需要添加样式规则以提供所需的视觉提示。
这个解决方案很好地降级,因为那些神话般的非JavaScript浏览器只会显示默认行为(你必须点击标题文本)。
希望这适合你!
编辑:我刚刚意识到我第一次没有仔细阅读你的问题。我的代码旨在当您单击标题中的任何位置(而不仅仅是链接文本)时获取默认排序行为。但我想这已足够接近了:))
顺便说一句,要将数据放入类似于ASP.NET所设置的模板字段中,只需添加
即可<ItemTemplate>
<%# Eval("FieldName") %>
</ItemTemplate>
请参阅有关格式化的文档等。