4

ASP.NET ページでページングが有効になっている LinqDataSource と FormView を使用しています。FormView のDataItemプロパティにアクセスしようとしていますPageLoadが、最初のページの読み込みでは問題はありませんが、FormView で次/前のページ ボタンを使用するとすぐに (ポストバックが発生します) DataItem、レコードがあってもプロパティは null になります。 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

あなたのデータは に保存されませんPostBackFormView次のようなものを使用して、PageIndexChangingイベント内で再バインドする必要があります。

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