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

时间:2018-08-09 16:55:54

标签: c# asp.net gridview-sorting

我有一个具有自动生成的列的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);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

  

并非所有代码路径都返回值

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();

我的猜测是您要在此处从头开始重建查询。