Gridview按图像排序

时间:2009-04-06 14:32:18

标签: c# asp.net gridview sorting

我有一个Web应用程序(带有C#的ASP.NET 2.0),其中有一个gridview,它从oracle数据库获取数据。

我需要为gridview实现sort函数,所以我在gridview上方添加了一个dropdownmenu,有2个选项:Ascending和Descending。然后在Gridview_Sorting方法中,我有一个switch语句,它基本上检查下拉菜单上的选择,并相应地进行排序。

这样可行,但我希望能够单击一次,然后按一种方式排序,然后再次单击它,然后按其他方式排序。我想要的另一件事是列名旁边的图像,它们告诉你数据的排序方向。

有什么建议吗? 谢谢。

5 个答案:

答案 0 :(得分:3)

查看此blog post以获取处理此

的通用子例程

答案 1 :(得分:1)

一个简单的解决方案是使用图像控件或图像按钮。在单击事件上,将图像从1个图像切换到另一个图像。要确定以前的状态,请使用会话变量或确定图像按钮的imageurl属性先前设置的内容,切换它并调用排序方法。

答案 2 :(得分:0)

我使用JQuery表分类器。客户端排序在前端更快,此插件允许您指定显示在列标题中的图像:

http://tablesorter.com/docs/

我不确定在使用此方法进行选择和交互时会产生什么影响,所以要小心。

答案 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条件)或先前的排序方向正在下降,则下次排序应按升序进行。同样,反之亦然。