2010-04-23 40 views
1

现在我得到了这个gridview,我需要头可以点击,然后事件开始(类似OnClickHeader =“header_ClickEvent”?)Ofcourse有一个SortExpression元素,它使排序网格,但我希望能够启动任何事件,例如点击按钮时。Gridview标题问题:在标题上调用事件

我无法在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> 

回答

1

好笑的是,我今天有同样的问题,和你一样,我发现了上述方案有点吃不消。

这是我很满意的事情。

首先,您需要使用CSS Friendly Control adapters。如果您使用GridView并且您有任何类别,则还有很多其他好处。在这种情况下需要它,因为它会根据排序属性向头添加必要的类,而ASP.NET不会。

你不需要改变任何代码,添加适配器,只需拖放在您的bin文件夹中的DLL,和他们.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;'); 
}); 

基本上,它去除的JavaScript离开链接时,在头ASP.NET的地方,它看起来像这样

<a href="javascript:__doPostBack('ctl00$Form$id','Sort$Quantity')">Qty</a> 

,并把代码到头部的click事件。然后它禁用链接,以便事件冒泡不会导致冲突。

当然,您需要添加样式规则以提供所需的视觉线索。

该解决方案降低了很好,因为这些神话中的非JavaScript的浏览器将只显示默认的行为(在那里你必须点击标题文本)。

希望这适合你!

编辑:我刚刚意识到我第一次没有仔细阅读你的问题。我的代码被设计为当您单击标题中的任何位置时(而不仅仅是链接文本)时,获得默认排序行为。但我想,这是足够接近:)

顺便说一句,将数据导入类似于ASP.NET会放有一个模板字段,你只需要添加

<ItemTemplate> 
    <%# Eval("FieldName") %> 
</ItemTemplate> 

查看格式的文件,等等

+0

哇,这当然需要一些研究:)谢谢! 顺便说一下,这个解决方案对服务器端属性有什么影响吗? 我的意思是,标准的asp和SQLserver安装是否足够? (纠正我,如果我错了,我有点绿色) – Joris 2010-04-23 20:54:07

+0

它没有看起来那么糟糕:)对我来说,这只是一个添加jQuery的问题,因为我已经设置了控制适配器。这些将改变服务器产生的标记,但通常会更好。特别是如果它是一个新项目,我会建议现在把它们,无论头问题。它将允许您使用CSS对GridView进行样式设置,并将呈现更多符合标准的HTML。 – harpo 2010-04-23 22:52:12