Переход к следующей странице в сетке не обновляет данные - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть сетка, которая отображает строки на основе фильтров формы.При переходе на следующую страницу данные остаются прежними.Я экспортировал данные в 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 голосов
/ 11 декабря 2018

Вам придется заново обработать метод делегата '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;
       }
}

В качестве альтернативы вы можете удалить пейджинг в сетке, установив свойство AllowPaging = "false" элемента Grid, если вы этого не сделаетенужен пейджинг.

...