4

我正在使用 LinqDataSource 和 FormView,并在 ASP.NET 页面上启用了分页。我正在尝试访问 FormView 的DataItem属性,PageLoad并且在第一页加载时没有问题,但是一旦我在 FormView 上使用 Next/Prev 页面按钮(导致回发)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;
    }
}
4

2 回答 2

5

绑定到任何数据绑定控件的对象不会保留在页面的 ViewState 中

因此,在后续帖子中,DataItem除非您重新绑定控件,否则该属性将为 null

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

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

例子:

输出

在此处输入图像描述

背后的代码

protected void ds_DataBound(object sender, EventArgs e)
{
    var d = this.fv.DataItem as employee;
    this.lbl.Text = d.lname;
}

ASPX

    <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" />
于 2012-07-18T18:51:45.620 回答
0

您的数据将不会保留在PostBack. 您需要使用以下方法重新绑定FormView事件PageIndexChanging

protected void FormView_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
    FormView.PageIndex = e.NewPageIndex;
    //rebind your data here
}
于 2012-07-18T17:52:27.140 回答