C# 单击列进行排序返回C中的所有列#

C# 单击列进行排序返回C中的所有列#,c#,asp.net,gridview-sorting,C#,Asp.net,Gridview Sorting,我有一个gridview表,它有自动生成的列,这些列中的行可以通过单击列名进行排序,因为我启用了“AllowSorting”。我还有一些复选框列表,用户可以选中或取消选中这些复选框来过滤表中的列和表外的列 问题是,当用户将表筛选到他们想要的任何列,然后单击任何列名时,它将按该列排序,但会返回他们筛选出的所有列 我猜我需要用GridViewSortEventArgs创建一个类,让事件只抓取用户筛选的列,而不是选择数据库中的所有列。我尝试了这个方法,但我不知道方向是否正确,但在GetSortColu

我有一个gridview表,它有自动生成的列,这些列中的行可以通过单击列名进行排序,因为我启用了“AllowSorting”。我还有一些复选框列表,用户可以选中或取消选中这些复选框来过滤表中的列和表外的列

问题是,当用户将表筛选到他们想要的任何列,然后单击任何列名时,它将按该列排序,但会返回他们筛选出的所有列

我猜我需要用
GridViewSortEventArgs
创建一个类,让事件只抓取用户筛选的列,而不是选择数据库中的所有列。我尝试了这个方法,但我不知道方向是否正确,但在
GetSortColumnIndex()
上也出现了一个错误,说“并非所有代码路径都返回值”
SQLQueryBuilder()
显然是为表btw生成查询

private void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        int sortColumnIndex = GetSortColumnIndex();

        if (sortColumnIndex != -1)

            SQLQueryBuilder();

    }

    int GetSortColumnIndex()
    {
        foreach (DataControlField field in GridView1.Columns)
        {
            if (field.SortExpression == GridView1.SortExpression)
            {
                return GridView1.Columns.IndexOf(field);
            }
        }
    }
并非所有代码路径都返回值

如果
field.SortExpression==GridView1.SortExpression
,则只返回一个值,因此添加一个
return-1

至于过滤值问题,您是否考虑了

SQLQueryBuilder();

我猜您是从头开始重建查询。

所以对于筛选值问题,我是从头开始重建查询。是否需要创建标题鼠标单击事件并调用
SQLQueryBuilder()
?基本上,让列标题鼠标单击事件与我的
btnSearch\u click
事件完全相同,然后在其中放入一个函数进行排序,这样做是否可行?
SQLQueryBuilder();