2016-12-15 4 views
0

私は現在asp.net webformsプロジェクトに取り組んでいると私は、私も同じページにasp:gridviewを持って移入GridViewの

  • asp:textbox
  • asp:DropDownList
  • asp:linkbutton

のページを持っています、と私はクリックするたびにそれに新しい行を挿入する必要がありますlinkbuttonデータをDataBaseに保存してください。 これを達成するために使用した方法は、データをViewStateリストに保存することです。

私の質問です:これを行うには良い方法はありませんか? の場合は、詳細に表示してください。

更新:PostBackが発生したとき、私はgridviewデータを失いません。

+0

[グリッドビューに行を追加します](http://stackoverflow.com/questions/19257451/add-row-to-grid-view) – VDWWD

+0

@VDWWDの可能性のある重複した更新をチェックしてみて下さい – Null

答えて

1

あなたはASP .NET State Managementを探していると、それに対処するいくつかの方法があります。

  • ビューステート
  • コントロール状態
  • 隠しフィールド
  • クッキー
  • クエリ文字列
  • は、アプリケーション状態
  • セッション状態
  • プロファイルのプロパティ

あなたは情報が上に格納されようとしているので、それはそれを行うための最も簡単な方法ですので、私はデータを保存するために、セッション状態を使用するためにあなたを示唆しているより多くの情報を提供していませんでしので、 (情報がクライアントに2回、ViewView.DataBind()に1つ、ViewStateに1つずつ)ViewStateを誤って使用するのではなく、サーバー側にあります。あなたが挿入/削除/あなたがmyGridViewDataセッション変数にデータセットを更新する必要があり、新しい行を変更するたびに

MyGridView.Datasource = (List<Object>)Session["myGridViewData"]; 
MyGridView.DataBind();  

:あなたはこのような何かをする必要があります。

そして、あなたは情報を失ういけないので、すべてのポストバックでGridView.DataSourceをリフレッシュすることを忘れないでください:

protected void Page_Load(object sender, EventArgs e) 
{ 
    grid1.DataSource = getDataSet(); 
    grid1.DataBind();  
} 

private List<Object> getDataSet() 
{ 
    if (Session["myGridViewData"] == null) 
     Session["myGridViewData"] = new List<employee>();    

    return (List<Object>)Session["myGridViewData"]; 
} 

protected void addNewRowButton_Click(object sender, EventArgs e) 
{ 
    List<Object> list = (List<Object>)Session["myGridViewData"];  
    list.Add(new Object()); 
    Session["myGridViewData"] = list; 
} 

Page_Loadイベントにコントロールを更新することをお勧めではないことに注意しておいてください、あなたの代わりに処理する必要がありますあなたのポストバックのどれがデータを更新し、apropiateメソッド(最初にページを読み込み、行を追加/変更/削除)でグリッドをリフレッシュします。あなたは、.NET Frameworkを使用している場合は

4.5または私はあなたが結合GridViewのモデルを使用することをお勧めします優れた(SelectMethod)これにより GridView Model Bindingは、クリーンな方法があるPage_Loadメソッドで明示的にすべてのポストバックでデータソースを更新するために必須ではありませんこれを行うの。

EDIT:here

セッション状態やViewStateのから?

ViewStateの状態値を保持することが最良の選択肢ではない場合は、 である場合があります。データの

  • 大量:最も一般的に使用される代替は、一般的に、より適しているため、セッション 状態、です。 ViewStateは、ブラウザに送信されるページ(HTMLペイロード)とフォーム のサイズが大きくなるので、大量のデータを格納するには適していません。

  • UIにまだ表示されていないデータを保護します。 ViewStateのデータはエンコードされ、オプションで暗号化されることがありますが、データがクライアントに送信されない場合は、データ が最も安全です。したがって、セッション状態は より安全なオプションです。 (データベース内のデータを保存することは、さらに多くのデータベース資格情報があるため、 が安全です。 にSSLを追加することもできます)。しかし、プライベートデータ をUIに表示した場合、 のリンク自体のセキュリティで快適です。この場合、同じ 値をViewStateに入れることも安全です。

  • オブジェクトは、ViewState(DataSetなど)に簡単にシリアル化されません。 ViewStateシリアライザは、以下にリストされた小さなオブジェクトセット のために最適化されています。シリアライズ可能な他のタイプの は、ViewStateで永続化されている可能性がありますが、遅く、表示サイズが大きい フットプリントを生成します。

+0

Mr.DiegoS、データをページレベルに保つ必要がある場合に備えて、どの州政府の管理者がお勧めしますか、なぜですか? – Null

+0

それはデータに依存しますが、私はセッション(これはほとんどの場合の答えです)を使うべきですが、隠されたフィールド(データ量が少ない場合)またはデータベースを使用できるケースがあります。 – DiegoS

+0

データは..最大50行の10列のグリッドと言えます。 – Null