Сортировка в GridView asp Grid - PullRequest
3 голосов
/ 17 октября 2011

Привет, ребята, я хотел отсортировать сетку asp, установив AllowSorting = "True".Я также добавил коды к событию, однако я не могу заставить его работать ..

  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 голосов
/ 17 октября 2011

Вы ошибаетесь во многих вещах:

  1. Ваш метод PopulateGridView связывает IQuerable с вашим видом сетки, но когда вы обрабатываете OnSorting, вы притворяетесь, что сможете получить DataTable в качестве источника данных вашего GridView.

  2. эта строка: DataTable dataTable = grd_sample.DataSource as DataTable; всегда будет возвращать NULL, поскольку ваше представление сетки не сохраняет ссылку на источник данных. Вам необходимо повторно получить данные, отсортировать их и связать заново. Другими словами, вам нужно сделать что-то подобное на 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();
    }
    

Но, честно говоря, вам, вероятно, лучше определить LinqDataSource для вашей таблицы данных. LinqDataSource будет выполнять операции разбиения по страницам, сортировки и CRUD практически без написания одной строки кода. Конечно, не для сортировки и подкачки.

...