首页 > 解决方案 > 通过单击列进行排序返回 C# 中的所有列

问题描述

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

问题是当用户将表过滤到他们想要的任何列然后单击任何列名时,它将按该列排序,但它会带回他们过滤掉的所有列。

我猜我需要创建一个类GridViewSortEventArgs并让事件只抓取用户过滤的列,而不是选择数据库中的所有列。我试过这个,但我不知道我是否朝着正确的方向前进,但我也确实收到一个错误,GetSortColumnIndex()说“并非所有代码路径都返回一个值”。SQLQueryBuilder()显然为表构建查询。

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

标签: c#asp.netgridview-sorting

解决方案


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

int GetSortColumnIndex()
{
    foreach (DataControlField field in GridView1.Columns)
    {
        if (field.SortExpression == GridView1.SortExpression)
        {
            return GridView1.Columns.IndexOf(field);
        }
    }
}

你只返回一个值 if ,所以在你的方法末尾field.SortExpression == GridView1.SortExpression添加 a 。return -1;

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

SQLQueryBuilder();

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


推荐阅读