сортировка gridview в asp.net/c# - PullRequest
       3

сортировка gridview в asp.net/c#

0 голосов
/ 10 апреля 2011

У меня есть вид сетки, который определяется следующим образом:

<asp:GridView ID="ComponentGridView" runat="server" AutoGenerateColumns="true" OnPageIndexChanging="ComponentGridView_PageIndexChanging" OnSorting="ComponentGridView_Sorting">
</asp:GridView>

и эти методы вызываются в ComponentGridView_Sorting

    protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = ComponentGridView.DataSource as DataTable;

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

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

и

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

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

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

        return newSortDirection;
    }

Но, кажется, ничего не происходит, когда я нажимаю на заголовки столбцов.

Что я делаю не так?

Пожалуйста, помогите мне

Спасибо в ожидании

Когда я отлаживал, dataTable равен нулю

DataTable dataTable = ComponentGridView.DataSource as DataTable;

Ответы [ 2 ]

4 голосов
/ 10 апреля 2011

Имейте в виду, что по умолчанию это состояние без сохранения состояния. Поэтому вам нужно сохранить ссылку на ваш источник данных или запросить данные еще раз.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("col1");
        dt.Columns.Add("col2");

        dt.Rows.Add(new object[] { 5, 1 });
        dt.Rows.Add(new object[] { 4, 2 });
        dt.Rows.Add(new object[] { 3, 3 });
        dt.Rows.Add(new object[] { 2, 4 });
        dt.Rows.Add(new object[] { 1, 5 });

        this.ComponentGridView.DataSource = dt;
        this.ComponentGridView.DataBind();

        Session["data"] = dt;
    }
}

protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dataTable = Session["data"] as DataTable;

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

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

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

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

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

    return newSortDirection;
}
0 голосов
/ 01 июня 2011

Я читал, и сортировка, кажется, прерывается, когда вы вручную предоставляете gridview источник данных.Не уверен, что это ваш случай, но это работает для меня ..

Когда вы впервые загружаете страницу и запрашиваете базу данных, вы должны сохранить данные в переменной Session (только в первый раз, когда страницазагружен)

Session["GridData"] = myDBTier.GetData();
GridView1.DataSource = Session["GridData"];
GridView1.DataBind();

Затем в событии Sorting для Gridview поместите следующее ..

string strSortExpression = e.SortExpression + " ASC";
if (Convert.ToString(ViewState["SortExpression"]) == strSortExpression)
{
   strSortExpression = e.SortExpression + " DESC";
}
ViewState["SortExpression"] = strSortExpression;

// Это делается путем сортировки представления по умолчанию для базовых данных изатем повторно привязать это // к сетке.

System.Data.DataTable myData = HttpContext.Current.Session["GridData"] as System.Data.DataTable;
if (myData != null)
{
  myData.DefaultView.Sort = strSortExpression;
  GridView1.DataSource = myData;
  GridView1.DataBind();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...