C# Gridview何时具有空数据源?

C# Gridview何时具有空数据源?,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我读过多个资料说Gridview不会在回发时保留该属性。我的理解是,在ASP.NET术语中,回发是指不是第一个页面加载的任何页面加载(请参阅) 我有两个非常相似的网格视图 GvOne.DataSource在回发时为空。 GvTwo.DataSource在回发时不为null 除了几个不同的列之外,唯一的区别是GvOne使用实体框架和LINQ填充。GvTwo由SqlDataAdapter填充的数据表填充 此外,GvOne和GvTwo有一个带有文本框的TemplateField,我用它来收集用户输入。

我读过多个资料说Gridview不会在回发时保留该属性。我的理解是,在ASP.NET术语中,回发是指不是第一个页面加载的任何页面加载(请参阅)

我有两个非常相似的网格视图

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

除了几个不同的列之外,唯一的区别是GvOne使用实体框架和LINQ填充。GvTwo由SqlDataAdapter填充的数据表填充

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

TextBox tb = (TextBox)GvOne.Rows[i].FindControl("actualTxt");
GvOne正确地收集tb.Text。GvTwo始终将tb.Text值查找为0

基本Gridview代码:

<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>

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

页面加载代码是什么样子的

GridView不会因为性能问题而在回发上填充DataSource属性


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

页面加载代码是什么样子的

GridView不会因为性能问题而在回发上填充DataSource属性



可能第二个gridview正在回发时重新绑定数据源?

gridview不会跨回发持久化数据源。如果您的gridview具有非空数据源,那么您必须在代码中的某个地方填充该数据源。通过事件循环查找回发时数据源填充的确切位置会很有帮助。

GridView不会跨回发持久化数据源。如果您的gridview具有非空数据源,那么您必须在代码中的某个地方填充该数据源。浏览事件周期,找出回发时数据源的总体确切位置,会很有启发性。

这一点都没有建设性或帮助,但我必须指出,您的主题听起来像是一个笑话。也许响应可能是“当数据源半开时!”我们需要查看绑定GridView的代码(以及何时-因此指定绑定它们的页面事件很重要)。关于更新,我们需要的不仅仅是这些!整个
Page\u Load
方法(减去需要保护的内容)将是一个良好的开端。您可以通过删除不相关的.aspx标记来为它腾出空间(除了向我们表明您没有使用声明性绑定)。我们需要看看是否有任何特殊情况,什么填充了dataSetObject等等。这一点都没有建设性或帮助,但我必须指出,你的主题听起来像是一个笑话。也许响应可能是“当数据源半开时!”我们需要查看绑定GridView的代码(以及何时-因此指定绑定它们的页面事件很重要)。关于更新,我们需要的不仅仅是这些!整个
Page\u Load
方法(减去需要保护的内容)将是一个良好的开端。您可以通过删除不相关的.aspx标记来为它腾出空间(除了向我们表明您没有使用声明性绑定)。我们需要看看是否有任何特殊的条件,什么填充数据对象等。感谢-1。。。如果不查看页面负载或如何绑定数据,就很难找出问题所在…+1在没有评论的情况下反对否决票。也就是说,这可能是一个评论本身。+1是的,你的评论有助于我找到答案。在获取完整代码时,答案变得显而易见。当您在asp.net中遇到数据绑定问题时,通常(99%)与如何在page_load方法中绑定数据有关,除非您使用Ajax感谢-1。。。如果不查看页面负载或如何绑定数据,就很难找出问题所在…+1在没有评论的情况下反对否决票。也就是说,这可能是一个评论本身。+1是的,你的评论有助于我找到答案。在获取完整代码时,答案变得显而易见。当您在asp.net中遇到数据绑定问题时,通常(99%)与如何在page_load方法中绑定数据有关,除非您使用的是Ajax,这非常有用!第一个大问题解决了。My Page_Load事件在GvOne中检查(!IsPostBack),但在GvTwo中不检查(!IsPostBack),因此正在回发中重新填充GridView!这也可能是tb.Text值被重置为0的原因…我将尝试检查回发,如果我只是标记为答案,那么我们就可以开始了!!!的确简单的缺乏检查!iPostback导致了所有这些问题。非常感谢您直截了当的回答。这就是为什么我问您页面加载代码的样子。这非常有帮助!第一个大问题解决了。My Page_Load事件在GvOne中检查(!IsPostBack),但在GvTwo中不检查(!IsPostBack),因此正在回发中重新填充GridView!这也可能是tb.Text值被重置为0的原因…我将尝试检查回发,如果我只是标记为答案,那么我们就可以开始了!!!的确简单的缺乏检查!iPostback导致了所有这些问题。非常感谢您直截了当的回答。这就是为什么我问您页面加载代码是什么样子的。
   ordersGV.DataSource = dataSetObject.Tables["activeParts"];
    ordersGV.DataBind();