Gridview何时具有null DataSource?

时间:2010-12-01 17:06:57

标签: c# asp.net entity-framework

我读过多个来源,说Gridview不会在回发上保留Gridview.DataSource属性。我的理解是,在ASP.NET的术语中,回发是任何不是第一个页面加载的页面加载(参见MSDN)。

我遇到了2个非常相似的网格视图的情况。

回发时GvOne.DataSource为空。
回发时GvTwo.DataSource不为null。

除了几个不同的列之外唯一的重大区别是GvOne填充了Entity Framework和LINQ。 GvTwo由一个由SqlDataAdapter填充的DataTable填充。

此外,GvOne和GvTwo有一个带有TextBox的TemplateField,我用它来收集用户输入。两者都使用相同的代码在回发时拉动TextBox.Text:

TextBox tb = (TextBox)GvOne.Rows[i].FindControl("actualTxt");

GvOne正确收集了tb.Text。 GvTwo 总是发现tb.Text值为0

基本网格视图代码:

<asp:GridView ID="GvOne" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:TemplateField HeaderText="Return">
   <ItemTemplate>
   <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox>
   </ItemTemplate>      
       </asp:TemplateField> 
         ...
        </Columns>
</asp:GridView>

<asp:GridView ID="GvTwo" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:TemplateField HeaderText="Order">
   <ItemTemplate>
   <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox>
   </ItemTemplate>      
       </asp:TemplateField> 

         ...
        </Columns>
</asp:GridView>

将GvTwo更改为使用Entity Framework和LINQ是一种潜在的解决方案,尽管这是一项重大任务。有谁知道这里发生了什么?

更新(请参阅我对Joel Etherton的答案的评论) 由于受欢迎的需求,这里是为GvTwo填充Page_Load事件中的gridview的代码(GvOne类似):

   ordersGV.DataSource = dataSetObject.Tables["activeParts"];
    ordersGV.DataBind();

通过搜索后面的代码,我发现没有其他对ordersGv.Datasource的引用,也没有其他与页面生命周期相关联的事件。

2 个答案:

答案 0 :(得分:3)

你的Page_load代码是什么样的?

对于性能问题,GridView不会在回发上填充DataSource属性

也许第二个gridview在回发时重新绑定数据源?

答案 1 :(得分:3)

Gridviews不会在回发之间保留数据源。如果您的gridview具有非null数据源,那么您必须在代码中的某处填充该数据源。通过您的事件周期来查找回发时数据源的确切位置将是有益的。