источник данных будет нулевым в gridview - PullRequest
2 голосов
/ 27 января 2011

У меня есть сетка, которую я связываю с результатом запроса linq, который находится в списке.В моем коде я связываю вид сетки со списком

MyGrid.DataSource = MyList;
MyGrid.DataBind();

У меня также есть сетка с включенной сортировкой:

<asp:GridView ID="MyGrid" AllowSorting="True" OnSorting="SortMyGrid">

В коде позади у меня есть обработчик событийустановить так:

protected void MyGrid(object sender, GridViewSortEventArgs e)
{
    var NewDataSource = from d in MyList
                orderby e.SortExpression
                select d;
}

Теперь проблема в том, что MyList равен нулю, когда обработчик событий вступает во владение!Я отслеживаю его и вижу, что он загружен нормально, я вижу вид сетки на странице с правильными данными, но как только я щелкаю заголовок столбца, чтобы отсортировать сетку, MyList обнуляется!Зачем??Что является причиной проблемы?

Ответы [ 2 ]

5 голосов
/ 27 января 2011

Как только ваши данные связаны, источник фактически «теряется» при следующем событии.Если вам нужно сохранить его, вы можете поместить его в свой сеанс и вытащить его, когда вам это нужно.

РЕДАКТИРОВАТЬ Что ж, термин «потерянный» звучит резко, но это не так.больше ссылки.Где бы у вас ни была ссылка на нее (загрузка страницы, скорее всего), вы можете сделать это:

MyGrid.DataSource = MyList;
MyGrid.DataBind();
Session["MyList"] = MyList;

Затем, в вашем обработчике событий (когда вам это понадобится снова), вытащите его обратно:

List<MyObjectType> MyList = Session["MyList"] as List<MyObjectType>;

где List<MyObjectType> - тип вашего списка.Session - это, по сути, словарь, поэтому вы можете хранить в нем что угодно, но вы должны разыграть его при выходе.

1 голос
/ 27 января 2011
 protected void MyGrid(object sender, GridViewSortEventArgs e)
    {
         var NewDataSource = from d in MyList
                     orderby e.SortExpression
                     select d;

          MyGrid.DataSource = NewDataSource;
          MyGrid.DataBind();
    }
...