我有一个具有自动生成的列的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);
}
}
}
答案 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();
我的猜测是您要在此处从头开始重建查询。