如何允许对网格视图进行排序? [英] How to allow sorting of a gridview?

查看:23
本文介绍了如何允许对网格视图进行排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 gridview 并启用了排序.运行应用程序时,我单击第一列进行排序.我收到此错误:未处理的 GridView 'gvOutlookMeldingen' 触发事件排序."

这是网格视图:

<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged"><列><asp:TemplateField HeaderText="Melder" ItemStyle-Horizo​​ntalAlign="Center" SortExpression="Melder"><HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle><ItemStyle Height="20px" Horizo​​ntalAlign="Center"></ItemStyle><项目模板><%# (string)Eval("Melder")%></ItemTemplate></asp:TemplateField><asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp"/><asp:TemplateField HeaderText="Omschrijving"><项目模板><div style="overflow:auto; width: 500px; height: 200px;"><asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>

</ItemTemplate></asp:TemplateField><asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum"/><asp:BoundField DataField="OutlookID" HeaderText="OutlookID"/></列></asp:GridView>

感谢任何帮助

解决方案

您的 BoundField 中缺少 SortExpression,如其他答案中所述.

您还使用了 TemplateField,根据生成数据的内容,除了使用 SortExpression 之外,它可能需要手动排序.

如果是这种情况,那么要手动排序,一种方法是在 GridViewSortExpression 中添加一个 OnSorting 回调到您的字段和在您的代码隐藏中回调的方法.

这将导致标记和代码类似于(未经测试):

<asp:GridView ID="gvOutlookMeldingen" runat="server"允许排序 =真"OnSorting="gvOutlookMeldingen_Sorting"AutoGenerateColumns="假"AutoGenerateSelectButton="True"onselectedindexchanged="GridView_SelectedIndexChanged"><列><asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder"/><asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp"/><asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving"><项目模板><div style="overflow:auto; width: 500px; height: 200px;"><asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>

</ItemTemplate></asp:TemplateField><asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum"/><asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID"/></列></asp:GridView>

...和:

protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e){开关(e.SortExpression){案例Melder":如果(e.SortDirection == SortDirection.Ascending){gvOutlookMeldingen.DataSource =//Melder 字段的 Asc 查询;gvOutlookMeldingen.DataBind();}别的{gvOutlookMeldingen.DataSource =//Melder 字段的 Desc 查询;gvOutlookMeldingen.DataBind();}休息;//其他字段的 case 语句.}}

I have a gridview and enabled sorting. When running the application I click on the first column to sort. And I get this error: "The GridView 'gvOutlookMeldingen' fired event Sorting which wasn't handled."

This is the gridview:

<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged">
    <Columns>
        <asp:TemplateField HeaderText="Melder" ItemStyle-HorizontalAlign="Center" SortExpression="Melder">
            <HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle>
            <ItemStyle Height="20px" HorizontalAlign="Center"></ItemStyle>
            <ItemTemplate>
                <%# (string)Eval("Melder") %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" />
        <asp:TemplateField HeaderText="Omschrijving">
            <ItemTemplate>
                <div style="overflow:auto; width: 500px; height: 200px;">
                    <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
                </div>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" />
        <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" />
    </Columns>
</asp:GridView>

Any help is appreciated

解决方案

You are missing SortExpression's in your BoundField's as mentioned in the other answers.

You are also using a TemplateField which, depending on what is generating your data, may require manual sorting beyond use of SortExpression.

If this is the case, then to sort manually, one method is to add an OnSorting callback to the GridView, SortExpression's to your fields and a method to callback in your code-behind.

This would result in markup and code similar to (untested):

<asp:GridView ID="gvOutlookMeldingen" runat="server" 
    AllowSorting="True" 
    OnSorting="gvOutlookMeldingen_Sorting"
    AutoGenerateColumns="False" 
    AutoGenerateSelectButton="True" 
    onselectedindexchanged="GridView_SelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder" />
        <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp" />
            <asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving">
                <ItemTemplate>
                    <div style="overflow:auto; width: 500px; height: 200px;">
                        <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
                    </div>
                </ItemTemplate>
            </asp:TemplateField>
        <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum" />
        <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID" />
    </Columns>
</asp:GridView>

...and:

protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e)
{
    switch (e.SortExpression)
    {
        case "Melder":
        if (e.SortDirection == SortDirection.Ascending)
        {
            gvOutlookMeldingen.DataSource = // Asc query for Melder field;
            gvOutlookMeldingen.DataBind();
        }
        else
        {
            gvOutlookMeldingen.DataSource = // Desc query for Melder field ;
            gvOutlookMeldingen.DataBind();
        }
        break;
        // case statements for your other fields.
    }
}

这篇关于如何允许对网格视图进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
C#/.NET最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆