C# 回发时FormView.DataItem为空

C# 回发时FormView.DataItem为空,c#,asp.net,.net,C#,Asp.net,.net,我在ASP.NET页面上使用LinqDataSource和启用分页的FormView。我正在尝试访问PageLoad上的FormView的DataItem属性,并且在第一页加载上没有问题,但是只要我使用FormView上的Next/Prev page按钮(导致回发),DataItem属性为空,即使FormView中显示了一条记录。你知道为什么它可以在第一页加载时正常工作,但在回发时却不行吗 如果您想知道我的PageLoad事件是什么样子,请看以下内容: protected void Page_L

我在ASP.NET页面上使用LinqDataSource和启用分页的FormView。我正在尝试访问
PageLoad
上的FormView的
DataItem
属性,并且在第一页加载上没有问题,但是只要我使用FormView上的Next/Prev page按钮(导致回发),
DataItem
属性为空,即使FormView中显示了一条记录。你知道为什么它可以在第一页加载时正常工作,但在回发时却不行吗

如果您想知道我的
PageLoad
事件是什么样子,请看以下内容:

protected void Page_Load(object sender, EventArgs e)
{
    Label lbl = (Label)fvData.FindControl("AREALabel");
    if (fvData.DataItem != null && lbl != null)
    {
        INSTRUMENT_LOOP_DESCRIPTION record = (INSTRUMENT_LOOP_DESCRIPTION)fvData.DataItem;
        var area = db.AREAs.SingleOrDefault(q => q.AREA1 == record.AREA);
        if (area != null)
            lbl.Text = area.AREA_NAME;
    }
}

您的数据将不会保留在
PostBack
上。您需要在
PageIndexchange
事件中重新绑定
FormView
,方法如下:

protected void FormView_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
    FormView.PageIndex = e.NewPageIndex;
    //rebind your data here
}

绑定到任何数据绑定控件的对象将不会在页面的ViewState中持久化

因此,在后续的POST中,
DataItem
属性将为null,除非您重新绑定控件

绑定控件时,此属性将包含对对象的引用

如果要在对象绑定时执行某些操作,通常需要访问此属性,因此需要对
DataBound
事件作出反应

例如:

输出

代码隐藏 ASPX



可能您必须在页面中重新绑定formview\u索引更改事件如果formview使用的是我在页面上放置的LinqDataSource控件中的数据,您如何重新绑定它?我在FormView和LinqDataSource上都调用了DataBind(),但两者都不起作用。我只是在使用页面上的LinqDataSource控件,如何强制它重新绑定数据?分页似乎工作正常,我在FormView和LinqDataSource上都调用了
DataBind()
,但两者似乎都不工作。您希望对FormView进行数据绑定。也许可以在FormView中尝试“EnableViewstate=“true”?
EnableViewstate
默认为true。非常奇怪的行为,因为当我翻页时,我可以清楚地看到表单视图中的数据-我就是无法访问数据项:(工作起来很有魅力。使用
DataBound
事件而不是
PageLoad
事件就成功了。谢谢!
protected void ds_DataBound(object sender, EventArgs e)
{
    var d = this.fv.DataItem as employee;
    this.lbl.Text = d.lname;
}
    <asp:LinqDataSource ID="lds" runat="server"
        ContextTypeName="DataClassesDataContext"
        TableName="employees" 
    >

    </asp:LinqDataSource>
    <asp:FormView runat="server" ID="fv" DataSourceID="lds" AllowPaging="true" 
        OnDataBound="ds_DataBound">
        <ItemTemplate>
            <asp:TextBox Text='<%# Bind("fname") %>' runat="server" ID="txt" />
        </ItemTemplate>
    </asp:FormView>
    <br />
    <asp:Label ID="lbl" runat="server" />