1

グリッドビューを備えた aspx ページがあります。私のページ読み込みイベントでは、次のようにすべてのデータを含むデータテーブルを読み込みます。

HistoricalPricing historicalPricing = new HistoricalPricing();
DataTable dtHistoricalPricing = new DataTable();

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dtHistoricalPricing = historicalPricing.GetAuctionData();
        }
    }

上記は、データをデータテーブル罰金にロードします。オークションのリストを含むリストボックスもあります。オークションをクリックすると、DataView で RowFilter を使用して、選択したデータを含む Gridview を表示しますが、DataTable の値が失われているようで、その理由がわかりません。以下にコードを示します。

protected void lstAuctions_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataView dvPricing = new DataView(dtHistoricalPricing); // Loses Value
        dvPricing.RowFilter = "Auction = 1"; //Hard-Coded for Test
        gvPricing.DataSource = dvPricing.ToTable();
        gvPricing.DataBind();
    }
4

4 に答える 4

2

ポストバックを行うたびに、ページ クラスの新しいインスタンスを処理しています。これは、新しいデータテーブル オブジェクトも意味します。

ポストバック間で本当に保持したい場合(そして、1000 人が同時にこの Web サーバーにアクセスする可能性がある場合のメモリへの影響を考慮してください)、データテーブルをセッション、ViewState、またはその他の場所に配置できます。状態を維持します。

于 2008-12-17T22:35:58.110 に答える
1

私はそれを理解したと思います、それは私がリストボックスをクリックすると、それはポストバックを行い、私はページの最初のロードでのみデータをロードしているからですか?これが正しければ、私は自分の質問に答えたと思います。

最初のページ読み込みでデータテーブルを読み込んだ後、Sessionにデータテーブルを配置しましたが、これで問題が解決したようです。ただし、これが最善の方法かどうかはわかりません。

于 2008-12-17T22:24:23.263 に答える
1

ある種あなた自身の質問に答えました。ページが読み込まれるたびにオブジェクトの新しいインスタンスを作成しているため、リストボックスがポストバックを投稿すると、コードは別のオブジェクトを処理します。

オブジェクトをグローバルに宣言してから、!Postbackコードでインスタンス化することをお勧めします。例:

DataTable dtHistoricalPricing = null;

..。

if (!Page.IsPostBack)
{
   if (dtHistoricalPosting == null)
   {
       //shouldn't need to do a new dtHistoricalPricing as the method below is returning a new instance?
       dtHistoricalPricing = historicalPricing.GetAuctionData();
   }
}
于 2008-12-17T22:29:13.457 に答える
1

ASP.NET では、要求間で値を保持することは困難です。最も信頼性の高い方法は、ViewState に配置することですが、それではすべてがクライアントに送信されて返されるため、そこに多くのデータを配置しないでください。セッションは代替手段ですが、ユーザーが同じセッション内でページで複数のウィンドウを開くと問題になる可能性があります。次に、アプリケーションの状態とキャッシュもありますが、それらはすべてのリクエスト間で共有されます (ユーザーかどうかに関係なく)。さらに、Web ファームがある場合、そこにある値はすべてのサーバーに対してローカルです。さらに、IIS は同じマシン上で複数の ASP.NET プロセスを生成することもでき、それぞれに独自のアプリケーション状態があります。静的変数についても同じことが言えます。

于 2008-12-17T22:40:16.540 に答える