我有一个gridview,它与列表中的linq查询的结果绑定。在我的代码后面,然后我将gridview与列表绑定
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为null!我正在跟踪它并且我看到它加载正常,我在页面上看到了具有正确数据的gridview,但是当我单击列标题对网格进行排序时,MyList变为null!为什么??是什么导致了这个问题?
答案 0 :(得分:5)
一旦绑定了数据,源就会在下一个事件中“丢失”。如果你需要保留它,你可以把它放在你的会话中,并在需要时把它拉出来。
修改强> 嗯,“丢失”一词听起来很刺耳,但不再引用了。无论你有什么引用(最有可能是页面加载),你都可以这样做:
MyGrid.DataSource = MyList;
MyGrid.DataBind();
Session["MyList"] = MyList;
然后,在您的事件处理程序中(当您再次需要它时),将其拉出来:
List<MyObjectType> MyList = Session["MyList"] as List<MyObjectType>;
其中List<MyObjectType>
是您的列表类型。 Session
基本上是一个字典,这就是为什么你可以在其中存储任何东西,但你必须在出路时投出它。
答案 1 :(得分:1)
protected void MyGrid(object sender, GridViewSortEventArgs e)
{
var NewDataSource = from d in MyList
orderby e.SortExpression
select d;
MyGrid.DataSource = NewDataSource;
MyGrid.DataBind();
}