datasource在gridview中为null

fre*_*hie 2 c# asp.net sorting data-binding gridview

我有一个gridview,我绑定了列表中的linq查询的结果.在我的代码后面,我然后将gridview与列表绑定

MyGrid.DataSource = MyList;
MyGrid.DataBind();
Run Code Online (Sandbox Code Playgroud)

我也有启用排序的网格:

<asp:GridView ID="MyGrid" AllowSorting="True" OnSorting="SortMyGrid">
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我将事件处理程序设置如下:

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

现在问题是当事件处理程序接管时MyList为null!我正在跟踪它并且我看到它加载正常,我在页面上看到了具有正确数据的gridview,但是当我单击列标题对网格进行排序时,MyList变为null!为什么??是什么导致了这个问题?

Mar*_*ius 5

绑定数据后,源会在下一个事件中"丢失".如果您需要保留它,可以将其放入会话中并在需要时将其拉出.

编辑 嗯,"丢失"这个词听起来很刺耳,但不再引用了.无论你有什么引用(最有可能是页面加载),你都可以这样做:

MyGrid.DataSource = MyList;
MyGrid.DataBind();
Session["MyList"] = MyList;
Run Code Online (Sandbox Code Playgroud)

然后,在您的事件处理程序中(当您再次需要它时),将其拉回:

List<MyObjectType> MyList = Session["MyList"] as List<MyObjectType>;
Run Code Online (Sandbox Code Playgroud)

List<MyObjectType>列表的类型在哪里.这Session基本上是一个字典,这就是为什么你可以在其中存储任何东西,但你必须在出路时投出它.