私はカスタムリスト作成しました:私は移入フォームコンストラクタで今すぐ項目はローカルスコープを持って
public class Invoice : Record
{
public BList Positions = null;
public Invoice()
: base()
{
Init();
this.Positions = new BList(this);
}
...
}
:
このリストよりpublic class BList : IEnumerable<Position>
{
private List<Position> positions = new List<BPosition>();
public void Add(Position p)
{ this.positions.Add(p); }
...
}
がクラスインボイスのメンバーであります請求書の収集とBListへのポジションの追加:
foreach(Invoice invoice in this.invoices)
{
// Load position for current invoice from the database
List<Position> positionsTmp = new List<Position>();
DB.LoadRecordset(positionsTmp, "id_invoice=3");
// and add to invoice positions items
positionsTmp.ToList().ForEach(p => invoice.Positions.Add(p));
}
各請求書内のポジションの一覧はpopulatです正しく編集されました。 しかし、私はこの同じクラスの他の関数でthis.invoicesを使用すると、各請求書は位置リストが空(Count = 0)になります。位置がローカルに追加されたように見えます。アプリケーションがコンストラクタを離れると、以前に追加された位置はすべて消去されます。 各請求書のBListをクラス全体で使用できるようにするにはどうすればよいですか?あなたのクラスの名前は、「請求書」である場合
おかげ
コードが混乱しています。 'Invoice'クラスのコンストラクタの名前は' Position'です。そして、 'this.Position'にアクセスする必要があると思うとき、' this.Position'を参照します。あなたのコンストラクタの 'ForEach'は' invoice.Position.Add'を呼び出す必要があると思うときに 'invoice.Position.Add'を呼び出します。私がそれを理解できるようにコードを整理してください。 –
エラーを修正しました。 – Robert
'foreach'ループでは、' invoice.Positions.Count() 'の戻り値はゼロではありませんが、コードの後のある時点で値はゼロですか?その場合、他の何かがリストをクリアしています。 –