Реализация сортировки ASP.NET GridView и обработка событий - PullRequest
3 голосов
/ 03 января 2012

Может кто-нибудь поделиться, как на практике реализовать сортировку вида сетки и обработать это событие, если:

  1. Данные связаны вручную
  2. Gridview создается с использованием поля шаблона, которое перекачиваетсятолько из кода позади (не из разметки)

Я строю свой gridview исключительно из codebehind, поэтому я не могу использовать метод или решение по умолчанию.

Спасибо

Ответы [ 3 ]

6 голосов
/ 03 января 2012

Это может быть то, что вы ищете:

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();
}

Это пример TemplateField:

<asp:TemplateField HeaderText="Description" SortExpression="description">
    <ItemTemplate>
        <asp:Label Visible="true" runat="server" ID="descriptionLabel" Text='<%# bind("description")  %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="txtEditDescription" Width="100px" runat="server" Text='<%#Bind("description") %>' />
    </EditItemTemplate>
</asp:TemplateField>

При добавлении свойства SortExpression заголовок GridView станет кликабельным.Убедитесь, что атрибутом выражения сортировки является имя поля, которое вы связываете с помощью SQL-запроса.

Надеюсь, это поможет.

1 голос
/ 04 декабря 2013
/* Best to use the shortened routine below - which can be further shortened */        
private string GetSortDirectionString()
{
    if (ViewState["sortDirection"] == null) ViewState["sortDirection"] = "ASC";

    var currDir = ViewState["sortDirection"].ToString().ToUpper();

    switch (currDir)
    {
        case "ASC": ViewState["sortDirection"] = "DESC"; break;
        case "DESC": ViewState["sortDirection"] = "ASC"; break; 
    }

    return ViewState["sortDirection"].ToString();
}
0 голосов
/ 10 ноября 2014

Вид сетки Сортировка в asp .net

Шаг ОДИН Добавить вид сетки на свою страницу, отредактируйте исходный код, добавив Разрешить сортировку true и инициирование события с помощью при сортировке

<asp:GridView ID="GridView1" AllowSorting="true" OnSorting="GridView1_Sorting"  runat="server">
    </asp:GridView>

Шаг второй

В коде за страницей .. нам нужно обработать это событие «GridView1_Sorting» и привязка таблицы данных.При загрузке страницы мы свяжем данные с сеткой

 dt = Class1.getDataSet().Tables[0]; // here dt is the datatable object declared Globally.
 GridView1.DataSource = dt; 
 GridView1.DataBind();

, поэтому теперь, если мы запустим наш код, сетка будет видна, но без сортировки.

Шаг третий

Далее нам нужно обработать событие сортировки Gridview.Прежде всего нам нужно объявить одну статическую строку SortDirection.

 protected void SetSortDirection(string sortDirection)
        {
            if (sortDirection == "ASC")
            {
                _sortDirection = "DESC";
            }
            else
            {
                _sortDirection = "ASC";
            }
        } 

, так что sortDirection является статической строкой ... Эта функция, которую мы использовали для переключения между восходящей и нисходящей ... Шаг 4

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        SetSortDirection(SortDirection);
        if (dt != null)
        {
            //Sort the data.
            dt.DefaultView.Sort = e.SortExpression + " " + _sortDirection;
            GridView1.DataSource = dt;
            GridView1.DataBind();
            SortDireaction = _sortDirection;
        }
    }

, поэтому мы завершили нашу сортировку .... sortExpression - это не что иное, как имя столбца ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...