单据体行如何实现跳转到指定行原创
金蝶云社区-勤劳的小蜜蜂
勤劳的小蜜蜂
7人赞赏了该文章 1,670次浏览 未经作者许可,禁止转载编辑于2020年07月31日 09:55:34


单据体行如何实现跳转到指定行

注:参照此思路可以实现上移下移功能

实现方式:

1:单据体新增一个序号字段:1):要与标准序号字段区分开。2):用于用户输入当前行需要调整到位置(简单来说就是将当前行位置移动到自己想要的位置)

2:代码编写新增序号字段值更新事件


/// <summary>

        /// 将当前行移动到指定行

        /// </summary>

        /// <param name="entityKey">单据体标识</param>

        /// <param name="rowIndex">当前行号</param>

        private void DoUp(string entityKey, int rowIndex)

        {

            

            Entity entity = this.Model.BillBusinessInfo.GetEntity(entityKey);

            DynamicObjectCollection rows = this.Model.GetEntityDataObject(entity);

            DynamicObject currRow = rows[rowIndex];

            //获取序号

            int FSEQ = Convert.ToInt32(currRow["FHWSEQ"]);

            if (rowIndex < 0 || rowIndex >= rows.Count|| FSEQ<=0|| FSEQ> rows.Count)

            {

                this.View.ShowMessage("行号不合理,不支持上移!");

                return; // 行号不合理,退出

            }

            if (rowIndex == 0)

            {

                this.View.ShowMessage("已经是第一行,不能上移!");

                return;

            }

           

            // 从行集合中,删除当前行

            rows.Remove(currRow);

            // 再把此行,插入到上一行的位置上

            rows.Insert(FSEQ - 1, currRow);

            // 更新行序号

            UpdateSEQ(rows, FSEQ, entity);

            //if (entity.SeqDynamicProperty != null)

            //{

            //    entity.SeqDynamicProperty.SetValue(rows[FSEQ - 1], FSEQ);

            //    entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);

            //}

            

            // 刷新界面上的表格数据

            this.View.UpdateView(entityKey);

            //指定焦点行可有效减少页面渲染加载

            this.View.SetEntityFocusRow("FEntity", FSEQ-1);

        }

        /// <summary>

        /// 上移更新行序号

        /// </summary>

        /// <param name="rows"></param>

        /// <param name="fSEQ"></param>

        private void UpdateSEQ(DynamicObjectCollection rows, int FSEQ, Entity entity)

        {

            //entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);

            for (int i= FSEQ;i<rows.Count+1;i++)

            {

                entity.SeqDynamicProperty.SetValue(rows[i - 1], i);

            }

        }

        /// <summary>

        /// 下移更新行序号

        /// </summary>

        /// <param name="rows"></param>

        /// <param name="fSEQ"></param>

        private void UpdateSEQ2(DynamicObjectCollection rows, int FSEQ, Entity entity)

        {

            //entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);

            for (int i = 0; i < FSEQ ; i++)

            {

                entity.SeqDynamicProperty.SetValue(rows[i], i+1);

            }

        }

        /// <summary>

        /// 下移

        /// </summary>

        /// <param name="entityKey">单据体标识</param>

        /// <param name="rowIndex">当前行号</param>

        private void DoDown(string entityKey, int rowIndex)

        {

            Entity entity = this.Model.BillBusinessInfo.GetEntity(entityKey);

            DynamicObjectCollection rows = this.Model.GetEntityDataObject(entity);

            DynamicObject currRow = rows[rowIndex];

            //获取序号

            int FSEQ = Convert.ToInt32(currRow["FHWSEQ"]);

            if (rowIndex < 0 || rowIndex >= rows.Count|| FSEQ<=0|| FSEQ> rows.Count)

            {

                this.View.ShowMessage("行号不合理,不支持下移!");

                return; // 行号不合理,退出

            }

            if (rowIndex == rows.Count - 1|| FSEQ>rows.Count)

            {

                this.View.ShowMessage("已经是最后一行,不能下移!");

                return;

            }

            

            // 从行集合中,删除当前行

            rows.Remove(currRow);

            // 再把此行,插入到下一行的位置上

            rows.Insert(FSEQ - 1, currRow);

            // 更新行序号

            UpdateSEQ2(rows, FSEQ, entity);

            //if (entity.SeqDynamicProperty != null)

            //{

            //    entity.SeqDynamicProperty.SetValue(rows[rowIndex], rowIndex + 1);

            //    entity.SeqDynamicProperty.SetValue(rows[rowIndex + 1], rowIndex + 2);

            //}

            // 刷新界面上的表格数据

            this.View.UpdateView(entityKey);

            //指定焦点行可有效减少页面渲染加载

            this.View.SetEntityFocusRow("FEntity", FSEQ-1);

        }






赞 7