2017-10-24 14 views
0

に項目を追加するとき、私は私がオブジェクトのインスタンスは、私は、オブジェクトのリストC#のasp.net

の背後にあるページのコードで初期化するオブジェクトを持ってここで、このオブジェクトのクラスの例です失わ

public Class Thing 
{ 
    List<OtherThing> _thisList; 
    public List<OtherThing> ThisList 
    { 
     get { return _thisList; } 
     set { _thisList= value; } 
    } 
    public Thing() 
    { 
     this._thisList=new List<OtherThing>(); 
    } 
} 

とここしかし

public partial class form : System.Web.UI.Page 
{ 
    private Thing theThing = new Thing(); 

    protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     OtherThing OT = new OtherThing(txtName.Text, Convert.toInt32(txtId.Text); 
     TheThing.ThisList.Add(OT); 
     this.gridview.DataSource=null; 
     this.gridview.DataSource=TheThing.ThisList(); 
     this.gridview.DataBind(); 
    } 
} 

の背後にある私のページのコードは、私は要素を追加するたびだ、唯一の最新のものが追加GridViewの表示が、私はデバッグを試したところ、私は「TheThing」の李ボタンをもう一度押すと、ボタンの追加がclickedたときにthis.gridview.DataSource=null;毎回宣言

:STのカウントがあるのでそれはある0

+0

と空想何もしていないとあなたはまた、これに問題があり、自動プロパティを使用することができます() 'TheThing.ThisList' ..これは間違っています。小帽子はTheThingにTheThing。 –

+0

私はあなたの洞察力に感謝しますが、これはスペイン語でコーディングし、私の例を翻訳しているからです。実際のシナリオでは、ビジュアルスタジオはそれが存在しないことを指摘するでしょう –

答えて

1

時間ごとなので、それはこの行を実行します

private Thing theThing = new Thing(); 

Thingの新しいオブジェクトを初期化するのは、aそのコンストラクタでは、ThisListプロパティを空のリストに初期化しています。

は、その行にブレークポイントを入れて、あなたが複数の呼び出しの間でデータを永続化したい場合は、あなたがどこかでそれを持続し、そこから読むべきそれを

を見ることができます。セッション状態、アプリケーション状態、メモリキャッシュ、ディスク内のファイルまたはデータベースに格納できます。

覚えておいてください、Httpはステートレスですです。理想的には、あなたのページへのすべての呼び出しは、以前の呼び出しが何をしたか分かりません。興味深いことに、この原則に反して、WebformsはViewStateという名前を使用して、呼び出し間のUIコントロール(ドロップダウンコントロールなど)のデータを保持します(ボタンクリックでポストバック)。これは、Webフォームにステートフルな性質(Windowsフォームアプリケーションのような)をもたらすためのハックのようなものです!

ところで、あなたのクラスは、単に `民間シングtheThing =新しいものから...それはsetget操作

public class Thing 
{ 
    public List<OtherThing> ThisList { get; set; } 
    public Thing() 
    { 
     this.ThisList = new List<OtherThing>(); 
    } 
} 
+0

私はそれが毎回新しいものを始めていることを知っていましたが、なぜ、感謝していませんでした! –

0

を表示します。

this.gridview.DataSource=null; 

とあなたのbutton Clickイベントで:

は、あなたのForm loadイベントでこれを入れてみてください、あなたがボタンをクリックし

protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     OtherThing OT = new OtherThing(txtName.Text, Convert.toInt32(txtId.Text); 
     TheThing.ThisList.Add(OT); 
     this.gridview.DataSource=TheThing.ThisList(); 
     this.gridview.DataBind(); 
    } 
+0

'null' 'TheThing.ThisList()'?確かに、それは不要ですが、最終的には最終的な割り当ては同じですね。 –

+0

フォームロードイベントよりもボタンがクリックされたときとは異なります。フォームロードイベントは1回だけ実行されます。ユーザーがクリックされるたびにボタンよりもデータが失われたと主張するOp。「最終譲渡が同じである」とはどういうことが言えますか? –

+0

'this.gridview.DataSource = TheThing.ThisList();'を実行したときに 'this.gridview.DataSource'が以前にあったものとは関係ないので、最終割り当てが同じであることを意味します(nullまたは" old "リスト)。あなたのコードとコードの両方が行う 'TheThing.ThisList()'に割り当てられました。 –

関連する問題