我有一个网格视图表,其中包含自动生成的列,并且这些列中的行可以通过单击列名进行排序,因为我有"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();
我的猜测是你正在从头开始重建查询。