datasource在gridview中为null

时间:2011-01-27 20:06:15

标签: c# asp.net sorting data-binding gridview

我有一个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!为什么??是什么导致了这个问题?

2 个答案:

答案 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();
    }