2011-01-28 3 views
0

私はgridviewとカレンダーを持つレポートページを持っています。ユーザーがページをロードすると、デフォルトの日付が今日のものになり、カレンダーコントロール内の日付をクリックすると、その日のレポートデータが読み込まれます。各ユーザーには異なるレポートがあり、データは1日あたり300〜500行です。セッション中のgridviewデータをキャッシュする

現時点では、リストの形式で1日分のデータを返すlinqクエリがあります。クエリあたりのデータ量が比較的少ないため、クエリの結果をセッションに保存して、データストアに戻らずにセッションからページングと並べ替えを行うことができます。

私が探しているのはリストのリストなので、クエリがロードされると、セッションがタイムアウトするまでデータが保存されます。たとえば、ユーザーが4-5の異なる日付を選択した場合、これらのクエリのそれぞれがセッションに保存され、次にそれらの日付の1つを再度クリックすると、関数は最初にデータがセッション内にあるかどうかを確認します。GetQueryFromSession DateTime TheDate)。

私はこれに固執しています。どのようにしてセッションオブジェクトで動作するリストのリストを作成しますか?ありがとう。

答えて

1

店セッション

private Dictionary<DateTime, System.Data.DataTable> Data 
    { 
     get 
     { 
      if (Session["data"] == null) 
      { 
       Session[ "data" ] = new Dictionary<DateTime, System.Data.DataTable>(); 
      } 

      return Session[ "data" ] as Dictionary<DateTime, System.Data.DataTable>; 
     } 
     set 
     { 
      Session[ "data" ] = value; 
     } 
    } 

で辞書その後、あなたはまた、 例えばリストの辞書を使用することができ、日付

あたりの結果セットを維持することができます:

Dictionary<DateTime, List<YourObject>> 

あなたのGETをQueryFromSessionメソッドは次のようになります。

private DataTable GetQueryFromSession(DateTime TheDate) 
{ 
    return this.Data[TheDate]; 
} 

または(あなたがリスト<>オプションを選んだ場合)

private List<YourObject> GetQueryFromSession(DateTime TheDate) 
{ 
    return this.Data[TheDate]; 
} 
+0

素晴らしい、[OK]をクリックします。そしてセットはリストの辞書でどのように機能しますか? – frenchie

+0

あなたは結果セットを追加するためにセットを使用しません。 this.data.Add(DateTime.Today、YourList/DataTable)を呼び出します。またはthis.data [DateTime.Today] = YourResultsetです。最初に存在するかどうかを確認してから、追加または修正してください。 – WraithNath

+0

大丈夫です!多くの時間を節約する。私は.netフレームワークにあまり慣れていません。セッションオブジェクト内にあるリストを参照するように指定する必要がありますか?ありがとう。 – frenchie

0

なぜセッション名を使用せず、選択した日付に基づいてデータセットごとに一意のキーを作成するのはなぜですか?

あなたができることは、降順で日付を並べ替え、文字列に変換し、連結して一意のIDを形成することです。

次に、IDを使用してセッションオブジェクトにデータを追加します。

関連する問題