«System.StackOverflowException» при сортировке GridView - PullRequest
0 голосов
/ 06 мая 2011

Когда я хочу отсортировать свой GridView вручную, я получаю эту ошибку: gridview sort Необработанное исключение типа 'System.StackOverflowException' произошло в System.Web.dll

Это строка кода, которую я запускаю. «Melder» - это правильное имя столбца, по которому я хочу отсортировать.

gvOutlookMeldingen.Sort("Melder", SortDirection.Ascending);

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Вы должны обработать события PageIndexChanging и Sorting "

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.DataSource = SortDataTable(GetYourDataSource(), true);
    GridView1.PageIndex = e.NewPageIndex;
    GridView1.DataBind();
}
private string GridViewSortDirection
{
    get { return ViewState["SortDirection"] as string ?? "ASC"; }
    set { ViewState["SortDirection"] = value; }
}
private string GridViewSortExpression
{
    get { return ViewState["SortExpression"] as string ?? string.Empty; }
    set { ViewState["SortExpression"] = value; }
}
private string ToggleSortDirection()
{
    switch (GridViewSortDirection)
    {
        case "ASC":
            GridViewSortDirection = "DESC";
            break;
        case "DESC":
            GridViewSortDirection = "ASC";
            break;
   }
   return GridViewSortDirection;
}
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
{
    if (dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        if (GridViewSortExpression != string.Empty)
        {
            if (isPageIndexChanging)
            {
                dataView.Sort = string.Format("{0} {1}",  GridViewSortExpression,GridViewSortDirection);
            }
            else
            {
                dataView.Sort = string.Format("{0} {1}",  GridViewSortExpression,ToggleSortDirection());
            }
       }
        return dataView;
    }
    else
    {
        return new DataView();
   }
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    GridViewSortExpression = e.SortExpression;
    int pageIndex = GridView1.PageIndex;
    GridView1.DataSource = SortDataTable(GetYourDataSource(), false);
    GridView1.PageIndex = pageIndex;
    GridView1.DataBind();
}
2 голосов
/ 10 мая 2011

Поместите свой Dataatable в Viewstate при первом связывании

gridView1.DataBind();
ViewState["dtbl"] = YourDataTable

а потом делай как ...

protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dataTable = ViewState["dtbl"] 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;
}

Посмотрите также статью MSDN http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx

0 голосов
/ 13 марта 2013

Я наткнулся на ваш вопрос здесь, когда у меня возникла та же проблема.

После некоторых исследований и чтения справки MSDN по методу сортировки я бы хотел спросить, вызывал ли вы этот метод изнутрисобытие сортировки GridView (которое я сделал)?

Это был бы неправильный подход, потому что метод Sort снова вызывает событие сортировки, что привело бы к бесконечному циклу.

Я нене знаю почему, но Sort () должен работать только вне события Sorting.

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