GridView Sorting сбрасывает страницу к исходным данным - PullRequest
2 голосов
/ 12 декабря 2011

H ребята, я использую VS2005 C # и SQL Server 2005.

У меня есть поиск для моего GridView , и я хотел бы использовать Сортировка функции GridView для сортировки результатов поиска.

Однако, после того, как каждый раз, когда мои результаты фильтруются, когда я нажимаю заголовок, чтобы отсортировать мою DataGrid , она всегдасбросьте мой GridView обратно к исходным полным данным из таблицы.

Например,

a) Моя веб-страница загрузится, просмотр таблицы, содержащий данные 58 студентов.

б) Я ищу Джеймс в Имена и 18 результатов отображаются в GridView.

в) Я нажимаю на заголовок Класс для сортировки результатов по классам.

d) GridView обновляется и возвращается к первоначальному полному списку из 58 учеников.


Я пытался:

  1. Реализация таблицы поиска на отдельной веб-странице, чтобы она не сталкивалась с исходным видом сетки.

  2. Изменение имени вида сетки на другое имя.


Я понимаю, что:

При наведении курсора на указатель вышезаголовок, он всегда будет отображать javascript:_doPostBack('ctl00$MainContent$GridView1,Sort$Issue),

, хотя я мог изменить свой GridView1 на другое имя


Мне нужно какое-то решениев сортировке результатов поиска в gridview, вместо возврата исходных данных при их сортировке.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Я реализовал это, используя ViewState для сохранения направления сортировки, ASC или DESC следующим образом:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        listBindByName(); //this would be your procedure to look for the data you want
        DataSet dsSortTable = GridView1.DataSource as DataSet;
        DataTable dtSortTable = dsSortTable.Tables[0];
        if (dtSortTable != null)
        {
            DataView dvSortedView = new DataView(dtSortTable);
            dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString();
            ViewState["sortExpression"] = e.SortExpression;
            GridView1.DataSource = dvSortedView;
            GridView1.DataBind();
        }
        UpdatePanel1.Update();
    }

    private string getSortDirectionString()
    {
        if (ViewState["sortDirection"] == null)
        {
            ViewState["sortDirection"] = "ASC";
        }
        else
        {
            if (ViewState["sortDirection"].ToString() == "ASC")
            {
                ViewState["sortDirection"] = "DESC";
                return ViewState["sortDirection"].ToString();
            }
            if (ViewState["sortDirection"].ToString() == "DESC")
            {
                ViewState["sortDirection"] = "ASC";
                return ViewState["sortDirection"].ToString();
            }
        }
        return ViewState["sortDirection"].ToString();
    }

Дайте мне знать, если возникнут сомнения.

0 голосов
/ 13 декабря 2011

предположим, когда вы вызываете gridview для Bind в загрузке страницы

  protected void Page_Load(object sender, EventArgs e)
    {  
         fillgrid(false, string.Empty, false); //
    }

  public void fillgrid(bool sorting, string sortexpression, bool sortdir)
    {
          //binding codes 
           var data = from item in DBcontent.Tablename 
                      select new
                      {
                          Title = item.Title
                      }  
             if (sorting)
                    {
                        if (sortexpression == "Title")
                        {
                            if (sortdir)
                            {
                                GrieviewID.DataSource = data.OrderBy(id => id.Title).ToList();
                            }
                            else
                            {
                                GrieviewID.DataSource = data.OrderByDescending(id => id.Title).ToList();
                            }
                        }
                   else
                    {
                        GrdID.DataSource = data.OrderByDescending(id => id.StartDate).ToList();
                    }
                GrdID.DataBind();
    }

  protected void grdevents_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdevents.PageIndex = e.NewPageIndex;
        BindAndSortGrid();
    }

    /// <summary>
    /// Gets the sort direction.
    /// </summary>
    /// <param name="column">The column.</param>
    /// <returns></returns>
    private string GetSortDirection(string column)
    {
        // By default, set the sort direction to ascending.
        string sortDirection = "ASC";

        // Retrieve the last column that was sorted.
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

    /// <summary>
    /// Bind and sort grid.
    /// </summary>
    private void BindAndSortGrid()
    {
        bool sortdir;
        if (ViewState["SortDirection"] != null && ViewState["SortExpression"] != null)
        {
            sortdir = ViewState["SortDirection"].ToString() == "ASC" ? true : false;
            fillgrid(true, ViewState["SortExpression"].ToString(), sortdir);
        }
        else
            fillgrid(false, string.Empty, false);
    }

    protected void grdevents_Sorting(object sender, GridViewSortEventArgs e)
    {
        bool sortdir = GetSortDirection(e.SortExpression) == "ASC" ? true : false;
        fillgrid(true, e.SortExpression.ToString(), sortdir);
    }

Следуйте приведенному ниже коду ... Надеемся на его помощь

...