我所指的具体例子是这个网站
http://www.iamextreme.net/category.php?CategoryId=1&SubCategoryId=0&SortBy=name
注意按下拉列表排序。基本上我想根据价格,名称,人气来对产品进行分类?
我是否必须重新查询数据库并再次在gridview中检索已排序的数据,或者我应该已经对gridview中已经存在的项目进行排序了吗?
我试过这个,但是它的方法错了,基本上我试图在页面加载事件中重新填充数据,这是错误的。
现在正确的做法是什么。
答案 0 :(得分:3)
对于DropDownList SelectedIndexChanged事件
,您可以使用类似的内容protected void DropDownList1_SelectIndexChanged(object sender, EventArgs e)
{
gvSorting.Sort(DropDownList1.SelectedValue, SortDirection.Ascending);
}
并处理GridView的排序事件
protected void gvSorting_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dtSortTable = gvSorting.DataSource as DataTable;
if (dtSortTable != null)
{
DataView dvSortedView = new DataView(dtSortTable);
dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection);
gvSorting.DataSource = dvSortedView;
gvSorting.DataBind();
}
}
private static string getSortDirectionString(SortDirection sortDireciton)
{
string newSortDirection = String.Empty;
if (sortDireciton == SortDirection.Ascending)
{
newSortDirection = "ASC";
}
else
{
newSortDirection = "DESC";
}
return newSortDirection;
}
答案 1 :(得分:1)
您不必重新查询数据库,但总体上可能更好(确保在用户浏览时新内容进入结果)。
我会响应一个事件(在示例中它是DropDownList上的SelectedValueChanged)并在那里进行排序。我会对一个集合进行排序,您可以将其保存在Session中或每次重新查询,然后设置GridView的DataSource并重新绑定。