在GridView asp Grid中排序

时间:2011-10-17 03:26:01

标签: c# asp.net linq-to-sql

大家好我想通过设置AllowSorting =“True”来排序我的asp网格。我还为活动添加了代码,但我似乎无法使其正常工作..

  private void PopulateGridView()
    {
        var a = from c in sample_worker.get()
                select new
                {
                    c.CemID,
                    c.Title,
                    c.Description
                };
        grd_sample.DataSource = a;
        grd_sample.DataBind();


    }

这是填充网格的代码。我在!ispostback下面添加了这个..

排序代码..

        private string ConvertSortDirectionToSql(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;

        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;

            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }

        return newSortDirection;
    }
    protected void grd_sample_Sorting(object sender, GridViewSortEventArgs e)
    {

        DataTable dataTable = grd_sample.DataSource as DataTable;


        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " +          ConvertSortDirectionToSql(e.SortDirection);

            grd_sample.DataSource = dataView;
            grd_sample.DataBind();
        }

    }

我该怎么做才能解决这个问题..我也可以来回排序吗? desc - asc - desc。 if(dataTable!= null)也总是为空。

提前致谢

1 个答案:

答案 0 :(得分:0)

你有很多错误:

  1. 您的方法PopulateGridView将IQuerable绑定到您的gridview,但是当您处理OnSorting时,您假装能够将DataTable作为GridView的DataSource。

  2. 此行:DataTable dataTable = grd_sample.DataSource as DataTable;将始终返回NULL,因为您的gridview未保留对DataSource的引用。您需要重新获取数据,对其进行排序并重新绑定。换句话说,您需要在grd_sample_Sorting

    上执行此类操作
    protected void grd_sample_Sorting(object sender, GridViewSortEventArgs e)
    {
    var a = from c in sample_worker.get()
                select new
                {
                    c.CemID,
                    c.Title,
                    c.Description
                };
    
        if(e.SortDirection=="ASC")
        {
             if(e.SortExpression=="CemID")
                a=a.OrderBy(x=>x.CemID);
             else if (e.SortExpression=="Title")
                a=a.OrderBy(x=>x.Title);
             //And so on...
        }
        else 
        {
             if(e.SortExpression=="CemID")
                a=a.OrderByDescending(x=>x.CemID);
             else if(e.SortExpression=="Title")
                a=a.OrderByDescending(x=>x.Title);
             //And so on...
        }
    
        grd_sample.DataSource = a;
        grd_sample.DataBind();
    }
    
  3. 但坦率地说,你可能最好为你的datagridview定义一个LinqDataSource。 LinqDataSource几乎不需要编写一行代码就可以执行分页,排序和CRUD操作。当然不适合排序和分页。