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



我有一个网格视图表,其中包含自动生成的列,并且这些列中的行可以通过单击列名进行排序,因为我有"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);
}
}
}

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

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

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

相关内容

  • 没有找到相关文章

最新更新