【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数

一、概述:

本篇主要介绍单据体(移动列表)字段新增的2个事件:

1. OnEntityRefresh 下拉刷新事件。

2. OnEntityPageChange 上拉翻页事件。

3. 格式化当前页数据

用于解决单据体字段一次加载所有数据,效率低下,无法干预翻页的问题,新的OnEntityPageChange 上拉翻页事件支持按页获取数据,格式化数据


二、适用版本:

    适用于V 7.6(PT-146867)及以上,移动运行时新框架xmobile版

 

三、详细介绍:

3.1. OnEntityRefresh 下拉刷新事件:

注:此事件默认取缓存数据,如需要重新从数据库中取数据时,可以重写此事件插件干预。

此示例下拉刷新时,重新从数据库取数据。 

/// <summary>
///  下拉刷新, 如不需要从数据库中重新取数,不需要此事件
/// </summary>
/// <param name="e"></param>
public override void OnEntityRefresh(EntityRefreshEventArgs e)
{
  if (e.Key == C_MAINENTITY_KEY)
  {
    GetEntityData(0, e.Limit, true);
  }
}


3.2. OnEntityPageChange 上拉翻页事件:

/// <summary>
/// 上拉翻页,取当前页数据
/// 如需格式化,只需格式化当前页数据即可
/// </summary>
/// <param name="e"></param>
public override void OnEntityPageChange(PageChangeEventArgs e)
{
    if (e.Key == C_MAINENTITY_KEY)
    {
        GetEntityData(e.Start, e.Limit, false);
    }
}


3.3. 格式化当前页数据:

格式化的原则:

        a. 每行格式化相同,直接对此字段或控件设置值或属性,如 this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor","yellow")

        b. 按需格式化,那行需要格式化那行,尽量减少格式化行数,缩小范围,避免没必要的格式化:this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat



示例:

1. 采用移动表单,用单据体字段制作一个移动列表(数据源:销售订单)

2. 上拉刷新实时取数,下拉每次加载当前页数据

3. 按当前页数据格式化

情况1: 格式化每一行同控件或字段相同属性,如:设置每行分割线(F_MOB_FlowLayout)背景为灰色

情况2: 格式化某一行同控件或字段相同属性,如:设置第一行分割线(F_MOB_FlowLayout)背景色为红色

情况3: 格式化当前分页每一行同一控件或字段不同属性,如:通过格式化给每行设置序号(F_LAB_NUM) 


BOSIDE设计时如下:


运行是效果图如下:




完整代码:

using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Mobile.Metadata;
using Kingdee.BOS.Mobile.PlugIn;
using Kingdee.BOS.Mobile.PlugIn.Args;
using Kingdee.BOS.Mobile.PlugIn.ControlModel;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System.Collections.Generic;
 
namespace BOS.Demo.MobilePlugIn
{
    /// <summary>
    /// 表单标识:MOB_MForm_EntityPageChage
    /// 移动表单继承:AbstractMobilePlugin, 移动单据继承:AbstractMobileBillPlugin, 移动单据列表继承:AbstractMobileListPlugin
    /// </summary>
    [System.ComponentModel.Description("移动表单插件 - 单据体下拉刷新重取数、上拉真翻页")]
    public class MForm_EntityPageChage : AbstractMobilePlugin
    {
        private const string C_MAINENTITY_KEY = "F_PAEZ_MOBILELISTVIEWENTITY";
        public override void AfterBindData(System.EventArgs e)
        {
           int pageSize=this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).GetPageSize();
           GetEntityData(0, pageSize, true);
        }
 
        /// <summary>
        ///  下拉刷新, 如不需要从数据库中重新取数,不需要此事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnEntityRefresh(EntityRefreshEventArgs e)
        {
            if (e.Key == C_MAINENTITY_KEY)
            {
                GetEntityData(0, e.Limit, true);
            }
        }
 
                     /// <summary>
        /// 上拉翻页,取当前页数据
        /// 如需格式化,只需格式化当前页数据即可
        /// </summary>
        /// <param name="e"></param>
        public override void OnEntityPageChange(PageChangeEventArgs e)
        {
            if (e.Key == C_MAINENTITY_KEY)
            {
                GetEntityData(e.Start, e.Limit, false);
            }
        }
 
                     /// <summary>
        /// 分页取数据
        /// </summary>
        /// <param name="start"></param>
        /// <param name="limit"></param>
        /// <param name="isRefresh"></param>
        private void GetEntityData(int start, int limit, bool isRefresh)
        {
            if (isRefresh)
            {
                //下拉刷新,重新从数据库取数据,删除已有Model数据
                start = 0;
                this.View.Model.DeleteEntryData(C_MAINENTITY_KEY);
                this.View.Model.DeleteEntryRow(C_MAINENTITY_KEY,0);//删除默认行
            }
 
            //获取来源单据的数据集合
            QueryBuilderParemeter queryParameter = new QueryBuilderParemeter();
            queryParameter.RequiresDataPermission = true;
            queryParameter.FormId = "SAL_SaleOrder";
            queryParameter.SelectItems = SelectorItemInfo.CreateItems("FID,FBillNo,FCustId,FDate");
            queryParameter.FilterClauseWihtKey = queryParameter.FilterClauseWihtKey.JoinFilterString(" FCREATORID=@spCreatorId ", "AND");//XSDD000362
            queryParameter.SqlParams.Add(new SqlParam("@spCreatorId", KDDbType.String, this.Context.UserId));
            queryParameter.OrderByClauseWihtKey = " FDate Desc ";
            queryParameter.StartRow = start;
            queryParameter.Limit = limit;
            queryParameter.TopRowCount = 0;
            DynamicObjectCollection sourceBillCollect = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParameter);
      
           //填充当前移动单据体
            var entity = this.View.BusinessInfo.GetEntity(C_MAINENTITY_KEY);
            DynamicObjectCollection currCollect = this.View.Model.GetEntityDataObject(entity);
            for (int i = 0; i < sourceBillCollect.Count; i++)
            {
                int rowIndex = this.View.Model.GetEntryRowCount(C_MAINENTITY_KEY);
                this.View.Model.CreateNewEntryRow(C_MAINENTITY_KEY);
                currCollect[rowIndex]["id"] = sourceBillCollect[i]["FID"];
                this.View.Model.SetItemValueByID("F_PAEZ_CUSTNAME", sourceBillCollect[i]["FCustId"], rowIndex);
                this.View.Model.SetValue("F_PAEZ_FORDERNUM", sourceBillCollect[i]["FBillNo"], rowIndex);
                this.View.Model.SetValue("F_PAEZ_FCREATEDATE", sourceBillCollect[i]["FDate"], rowIndex);
            }
 
            //刷新
            if (isRefresh)
            {
                this.View.UpdateView(C_MAINENTITY_KEY);
            }
 
            //格式化
            this.FormatData(start, sourceBillCollect.Count);
        }
 
         /// <summary>
        /// 格式化
        /// </summary>
        /// <param name="start"></param>
        /// <param name="currPageCount"></param>
        private void FormatData(int start,int currPageCount) {
            //格式化的原则:
            //a.每行格式化相同,直接对此字段或控件设置值或属性,如 this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor","yellow")
            //b 按需格式化,用this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat,
 
            //情况1. 格式化所有行,每行都相同( F_MOB_FlowLayout 背景为灰色)
            this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor", "#c1c1ca");
 
            //情况2. 格式化第一行F_MOB_FlowLayout背景色 为红色
            List<MobileFormatCondition> formatCondition = new List<MobileFormatCondition>();
            formatCondition.Add(new MobileFormatCondition() { Key = "F_MOB_FlowLayout", BackColor = "red", Row = 1 });
            this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat(formatCondition);
 
            //情况3.格式化当前分页的所有数据(前提是每行都不同),尽量减少格式化每一行,缩小范围
            //这里以设置每行序号为例
            formatCondition = new List<MobileFormatCondition>();
            int end = start + currPageCount;
            for (var i = start; i < end; i++)
            {
                var r = i + 1;
                formatCondition.Add(new MobileFormatCondition() { Key = "F_LAB_NUM", Value = r.ToString(), Row =r });
            }
            this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat(formatCondition);
        }
    }
}



【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数

一、概述: 本篇主要介绍单据体(移动列表)字段新增的2个事件:1. OnEntityRefresh 下拉刷新事件。2. OnEntityPageChange 上拉翻页事件...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息