ASP.NET gridview不允许我单击列标题文本,因此我可以对数据进行排序

时间:2013-06-17 23:19:28

标签: c# asp.net sorting gridview

我只是想让用户通过它的任何一列对GridView进行排序。

<asp:GridView ID="gvShows" runat="server" DataKeyNames="dataSource,title" Caption="Show List" AutoGenerateColumns="False" AllowSorting="True" AllowPaging="True" CaptionAlign="Left" OnSorting="gvShows_Sorting" >
                    <RowStyle BorderColor="Black" />
                    <Columns> 
                        <asp:TemplateField HeaderText="Select"> 
                            <ItemTemplate> 
                                <asp:CheckBox ID="cbSelect" runat="server" AutoPostBack="false"/> 
                            </ItemTemplate> 
                        </asp:TemplateField> 
                        <asp:BoundField HeaderText="Data Source" DataField="dataSource" /> 
                        <asp:BoundField HeaderText="Show ID" DataField="ShowId" /> 
                        <asp:BoundField HeaderText="Show Title" DataField="title" /> 
                        <asp:BoundField HeaderText="Episode Id" DataField="EpisodeID" /> 
                        <asp:BoundField HeaderText="Episode Title" DataField="EpisodeTitle" /> 
                        <asp:BoundField HeaderText="Genre" DataField="Genre" /> 
                        <asp:BoundField HeaderText="Show Type Description" DataField="ShowTypeDescription" /> 
                        <asp:BoundField HeaderText="Director Name" DataField="DirectorName" /> 
                        <asp:BoundField HeaderText="Release Year" DataField="ReleaseYear" /> 
                        <asp:BoundField HeaderText="Season Episode" DataField="SeasonEpisode" /> 
                    </Columns>  
                </asp:GridView>

    protected void gvShows_Sorting(object sender, GridViewSortEventArgs e)
    {
        var dataTable = Session["shows"] as DataTable;

        if (dataTable != null)
        {
            var dataView = new DataView(dataTable)
                {
                    Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection)
                };

            gvShows.DataSource = dataView;
            gvShows.DataBind();
        }
    }

    private string ConvertSortDirection(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;

        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;

            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }

        return newSortDirection;
    }

当数据显示在GridView中时,我根本不允许点击标题文本以便我可以对数据进行排序:

2 个答案:

答案 0 :(得分:4)

您需要在asp:BoundField中添加“ SortExpression ”。

例如:

<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />

答案 1 :(得分:0)

我明白了。我需要添加SortExpressions,因为列不是自动生成的。