我有一个Web应用程序(带有C#的ASP.NET 2.0),其中有一个gridview,它从oracle数据库获取数据。
我需要为gridview实现sort函数,所以我在gridview上方添加了一个dropdownmenu,有2个选项:Ascending和Descending。然后在Gridview_Sorting
方法中,我有一个switch语句,它基本上检查下拉菜单上的选择,并相应地进行排序。
这样可行,但我希望能够单击一次,然后按一种方式排序,然后再次单击它,然后按其他方式排序。我想要的另一件事是列名旁边的图像,它们告诉你数据的排序方向。
有什么建议吗? 谢谢。
答案 0 :(得分:3)
查看此blog post以获取处理此
的通用子例程答案 1 :(得分:1)
一个简单的解决方案是使用图像控件或图像按钮。在单击事件上,将图像从1个图像切换到另一个图像。要确定以前的状态,请使用会话变量或确定图像按钮的imageurl属性先前设置的内容,切换它并调用排序方法。
答案 2 :(得分:0)
我使用JQuery表分类器。客户端排序在前端更快,此插件允许您指定显示在列标题中的图像:
我不确定在使用此方法进行选择和交互时会产生什么影响,所以要小心。
答案 3 :(得分:0)
我在排序时将图像添加到标题单元格中:
// ...
GridViewRow headerRow = GridView1.HeaderRow;
foreach (TableCell tableCell in headerRow.Cells)
{
if (tableCell.HasControls())
{
LinkButton button = tableCell.Controls[0] as LinkButton;
if (button != null)
{
if (sortExp == button.CommandArgument)
{
Image image = new Image();
if (sortDir == "ASC")
{
image.ImageUrl = "/_layouts/Document LibraryManager/icon_ascending.gif";
tableCell.Controls.Add(image);
}
else
{
image.ImageUrl = "/_layouts/Document LibraryManager/icon_descending.gif";
tableCell.Controls.Add(image);
}
}
}
}
}
答案 4 :(得分:0)
最简单,最优雅的方法是使用 ViewState 。 在ViewState中保留排序方向,并在每次排序时访问它。
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null || (SortDirection)ViewState["sortDirection"] == SortDirection.Descending)
ViewState["sortDirection"] = SortDirection.Ascending;
else if ((SortDirection)ViewState["sortDirection"] == SortDirection.Ascending)
ViewState["sortDirection"] = SortDirection.Descending;
return (SortDirection)ViewState["sortDirection"];
}
set
{ ViewState["sortDirection"] = value; }
}
如果之前没有进行排序( null条件)或先前的排序方向正在下降,则下次排序应按升序进行。同样,反之亦然。