2017-02-02 6 views
1

2つのフィールドを顧客詳細ページに追加しようとしていますが、元の通貨で稼働していた文書量と各通貨での文書総稼働合計で1つです。元の通貨の合計を割り当てるためのグラフ拡張と、通貨とその合計の実行合計を保持するための辞書です。両方のフィールドの合計が最初のページ/レコードリストで正しく機能していますが、次のページの値はゼロからカウント処理を再開し、また重複します。実行中の合計を次のレコードのリストに転送し、最初の値の後にレコードの各ページに最初の値が重複しないようにする方法はありますか?ここでのコードはacumaticaの顧客詳細ページ(AR402000)で稼動合計

public decimal AllCurTotals = 0; //summation of doc amt in original currency 
Dictionary<string, decimal> curydict = new Dictionary<string, decimal>(); //summation of doc amt in seprate currencies 
protected void ARDocumentResult_RowSelected(PXCache cache, PXRowSelectedEventArgs e) 
{   
      ARDocumentEnq.ARDocumentResult row = (ARDocumentEnq.ARDocumentResult)e.Row; 
      if (row == null) return; 
      ARRegisterExt extobj = cache.GetExtension<ARRegisterExt>(row); 
      AllCurTotals += row.OrigDocAmt ?? 0; 
      cache.SetValue<ARRegisterExt.usrrunningtot>(row, AllCurTotals); 
      if (curydict.ContainsKey(row.CuryID)) 
      { 
       curydict[row.CuryID] += row.CuryOrigDocAmt ?? 0; 
       extobj.Usrrunningtotpercur = curydict[row.CuryID]; 
      } 
      else 
      { 
       curydict[row.CuryID] = row.CuryOrigDocAmt ?? 0; 
       extobj.Usrrunningtotpercur = curydict[row.CuryID]; 

      }   
     } 

答えて

1

RowSelectedがそのように、このアプローチがグリッドに表示される行の合計を計算するために動作しません一度レコードごとに呼び出されていない計算に使用しています。

データビューデリゲートを使用して、画面上の可視レコードに基づいて合計を計算することをお勧めします。

public IEnumerable dataView() 
{ 
       PXView select = new PXView(this, true, DataView.View.BqlSelect); 
       Int32 totalrow = 0; 
       Int32 startrow = PXView.StartRow; 
     List<object> result = select.Select(PXView.Currents, PXView.Parameters,         
       PXView.Searches, PXView.SortColumns, PXView.Descendings,  
       PXView.Filters, ref startrow, PXView.MaximumRows, ref totalrow); 
       PXView.StartRow = 0; 
       foreach (PXResult<Contract, ContractBillingSchedule, CSAnswers> row in result) 
       { 
              //Do any dynamic calculations 
       } 

       return result; 
} 

源:http://asiablog.acumatica.com/2016/06/using-pxview-in-dataview-delegate.html

+0

データグリッドが既に – Sam

+0

、その方法は、データビューと同じ名前を持つず、小文字で始まるのIEnumerable型を返すメソッドとして実装されている使用して表示します?その場合、これはデータビューの委任です。これは、その名前を命名するための規約です。 IEnumerableコレクションは、私が掲示した例のようにそのメソッドで反復することができるはずです。これには、画面に表示されるレコードのみが含まれます。レコード0から最後のレコードをグリッドに表示する必要がある場合は、選択を変更することもできます。ただし、PXView.StartRowおよびPXView.MaximumRowsに従って画面上に表示されるレコードのみを必ず返してください。 –

+0

ok、それは動作しているようです – Sam

関連する問題