导航到网格上的下一页不会刷新数据

时间:2018-12-11 18:07:46

标签: acumatica

我有一个网格,用于根据表单的过滤器显示行。导航到下一页时,数据保持不变。我已经将数据导出到获取所有行的excel中。仅首页和最后一页导航会更改行。请帮助我在ASPX中缺少什么 enter image description here

enter image description here

包含视图委托和DAC的图形

     public class InventorySales : PXGraph<InventorySales>
{
    [Serializable]
    public class Filter : IBqlTable
    {
        public abstract class wareHouse : IBqlField { }

        [PXDefault()]
        [PXUIField(DisplayName = "Warehouse")]
        [PX.Objects.IN.POSiteAvail(typeof(POReceiptLine.inventoryID), typeof(POReceiptLine.subItemID))]
        public virtual int? WareHouse { get; set; }


        #region InventoryID
        public abstract class inventoryCD : PX.Data.IBqlField
        {
        }
        protected Int32? _InventoryCD;
        [PXInt()]
        [PXUIField(DisplayName = "SKU", Visibility = PXUIVisibility.SelectorVisible)]
        [PXSelector(typeof(Search<
            InventoryItem.inventoryID,
            Where<InventoryItem.itemStatus, Equal<InventoryItemStatus.active>>>),
            new Type[] { typeof(InventoryItem.inventoryID), typeof(InventoryItem.inventoryCD),
                 typeof(InventoryItem.itemStatus),
                 typeof(InventoryItem.descr)},
            SubstituteKey = typeof(InventoryItem.inventoryCD),
            DescriptionField = typeof(InventoryItem.descr))]
        public virtual Int32? InventoryCD
        {
            get
            {
                return this._InventoryCD;
            }
            set
            {
                this._InventoryCD = value;
            }
        }
        #endregion


        #region BeginDate
        public abstract class beginDate : IBqlField
        {
        }
        protected DateTime? _BeginDate;
        [PXDBDate]
        [PXDefault(typeof(AccessInfo.businessDate))]
        [PXUIField(DisplayName = "Start Date")]
        public virtual DateTime? BeginDate
        {
            get
            {
                return _BeginDate;
            }
            set
            {
                _BeginDate = value;
            }
        }
        #endregion

        #region EndDate
        public abstract class endDate : IBqlField { }
        [PXDBDate]
        [PXDefault(typeof(AccessInfo.businessDate))]
        [PXUIField(DisplayName = "End Date")]
        public virtual DateTime? EndDate { get; set; }
        #endregion

        #region Sales
        public abstract class sales : PX.Data.IBqlField
        {
        }
        protected Int32? _Sales;         
        [PXInt()]
        [PXUnboundDefault("30")]
        [PXUIField(DisplayName = "Sales")]
        [InvSales.List]
        public virtual Int32? Sales
        {
            get
            {
                return this._Sales;
            }
            set
            {
                this._Sales = value;
            }
        }
        #endregion
    }

    public PXCancel<Filter> Cancel;
    public PXFilter<Filter> MasterView;

    public PXSelectJoin<
        POReceiptLine,
        InnerJoin<POReceipt,
            On<POReceiptLine.receiptType, Equal<POReceipt.receiptType>,
            And<POReceiptLine.receiptNbr, Equal<POReceipt.receiptNbr>>>,
        InnerJoin<INSiteStatus,
            On<INSiteStatus.inventoryID, Equal<POReceiptLine.inventoryID>,
            And<INSiteStatus.siteID, Equal<POReceiptLine.siteID>>>>>,
        Where2<
            Where2<
                Where<POReceiptLine.siteID, Equal<Current<Filter.wareHouse>>,
                    And<POReceipt.receiptType, Equal<POReceiptType.poreceipt>>>,
                And<Where<POReceiptLine.inventoryID, Equal<Current<Filter.inventoryCD>>,
                    Or<Current<Filter.inventoryCD>, IsNull>>>>, 
            And<Where<POReceiptLine.receiptDate, GreaterEqual<Current<Filter.beginDate>>,
                And<POReceiptLine.receiptDate, LessEqual<Current<Filter.endDate>>>>>>>
        DetailsView;

    public PXSelectJoin<
        SOLine,
        InnerJoin<SOOrder,
            On<SOLine.orderType, Equal<SOOrder.orderType>,
            And<SOOrder.orderNbr, Equal<SOLine.orderNbr>>>>,
        Where<SOOrder.status, NotEqual<SOStatus>,
            And<SOOrder.orderDate, GreaterEqual<Sub<Current<AccessInfo.businessDate>,Current<Filter.sales>>>,
            And<SOOrder.orderDate, LessEqual<Current<AccessInfo.businessDate>>>>>> ss;
    List<PXResult<SOLine>> list = new List<PXResult<SOLine>>();


    public IEnumerable detailsView()
    {
        list = PXSelectJoin<
            SOLine,
            InnerJoin<SOOrder,
                On<SOLine.orderType, Equal<SOOrder.orderType>,
                And<SOOrder.orderNbr, Equal<SOLine.orderNbr>>>>,
            Where<SOOrder.status, NotEqual<SOStatus>,
                And<SOOrder.orderDate, GreaterEqual<Sub<Current<AccessInfo.businessDate>, Current<Filter.sales>>>,
                And<SOOrder.orderDate, LessEqual<Current<AccessInfo.businessDate>>>>>>.Select(this).ToList();         
        Int32 startrow = PXView.StartRow;
        List<POReceiptLine> poReceiptLineList = new List<POReceiptLine>();   

        PXView.StartRow = 0;
        foreach (PXResult<POReceiptLine, POReceipt, INSiteStatus> result in PXSelectJoin<
            POReceiptLine,
            InnerJoin<POReceipt,
                On<POReceiptLine.receiptType, Equal<POReceipt.receiptType>,
                And<POReceiptLine.receiptNbr, Equal<POReceipt.receiptNbr>>>,
            InnerJoin<INSiteStatus,
                On<INSiteStatus.inventoryID, Equal<POReceiptLine.inventoryID>,
                And<INSiteStatus.siteID, Equal<POReceiptLine.siteID>>>>>,
            Where2<
                Where2<
                    Where<POReceiptLine.siteID, Equal<Current<Filter.wareHouse>>,
                        And<POReceipt.receiptType, Equal<POReceiptType.poreceipt>>>,
                    And<Where<POReceiptLine.inventoryID, Equal<Current<Filter.inventoryCD>>,
                        Or<Current<Filter.inventoryCD>, IsNull>>>>, 
                And<Where<POReceiptLine.receiptDate, GreaterEqual<Current<Filter.beginDate>>,
                    And<POReceiptLine.receiptDate, LessEqual<Current<Filter.endDate>>>>>>>
            .Select(this))
        {
            decimal? sum = 0.00M;
            POReceiptLine objsalesprice = (POReceiptLine)result;
            INSiteStatus objInSiteStatus = (INSiteStatus)result;
            if (objsalesprice != null)
            {
                POReceiptLineExt obj = objsalesprice.GetExtension<POReceiptLineExt>();                    
                foreach (PXResult<SOLine> res in list)
                {
                    SOLine so = (SOLine)res;
                    if (so.InventoryID == objsalesprice.InventoryID)
                        sum = sum + so.CuryLineAmt;

                }
                obj.UsrSales = sum;
                obj.UsrQtyAvail = objInSiteStatus.QtyAvail;                   
                if (!poReceiptLineList.Any(x => x.InventoryID == objsalesprice.InventoryID))
                {
                    poReceiptLineList.Add(objsalesprice);
                }
                else if (poReceiptLineList.Any(x => x.InventoryID == objsalesprice.InventoryID && x.ReceiptDate.Value.Date < objsalesprice.ReceiptDate.Value.Date))
                {
                    var itemToRemove = poReceiptLineList.Single(r => (r.InventoryID == objsalesprice.InventoryID));
                    poReceiptLineList.Remove(itemToRemove);
                    poReceiptLineList.Add(objsalesprice);

                }
                else if (poReceiptLineList.Any(x => x.InventoryID == objsalesprice.InventoryID
                 && x.ReceiptDate.Value.Date == objsalesprice.ReceiptDate.Value.Date && x.CreatedDateTime < objsalesprice.CreatedDateTime))
                {
                    var itemToRemove = poReceiptLineList.Single(r => (r.InventoryID == objsalesprice.InventoryID));
                    poReceiptLineList.Remove(itemToRemove);
                    poReceiptLineList.Add(objsalesprice);
                }
            }

        }
        return poReceiptLineList;
    }
}

1 个答案:

答案 0 :(得分:0)

您将不得不重新设计'detailsView'委托方法,以便它使用PXView模式来处理分页。

有关在委托中使用PXView和分页的详细说明,可以在这里找到:https://asiablog.acumatica.com/2016/06/using-pxview-in-dataview-delegate.html

以下是该页面的相关代码摘录:

public PXSelect<DAC> DataView;

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<DAC> row in result)
       {
           // Do any dynamic calculations
           yield return row;
       }
}

或者,如果不需要分页,则可以通过设置Grid元素的AllowPaging =“ false”属性来删除网格上的分页。