在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → K3Cloud动态表单实现树形报表

K3Cloud动态表单实现树形报表

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:5.90KB
  • 下载次数:20
  • 浏览次数:171
  • 发布时间:2021-11-24
  • 实例类别:C#语言基础
  • 发 布 人:张放
  • 文件格式:.rar
  • 所需积分:2
 相关标签: K3Cloud

实例介绍

【实例简介】1、先开发一张动态表单,放入树形控件和单据体

【核心代码】2、编写动态表单插件,示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.Base.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.Core.Metadata.EntityElement;
using System.ComponentModel;
using System.Dynamic;
using System.Data;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Bill;

namespace TreeNodeTest
{
    public class TreeNodeTest : AbstractDynamicFormPlugIn
    {
        /// <summary>
        /// 元数据
        /// </summary>
        private BusinessInfo _currInfo = null;
        /// <summary>
        /// 界面布局
        /// </summary>
        private LayoutInfo _currLayout = null;
        /// <summary>
        /// 初始化界面元数据时触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 通常在此事件中,修改界面元数据;
        /// 本示例,在此事件中,把界面元数据复制到本地,避免与其他实例公用元数据,造成串账
        /// </remarks>
        public override void OnSetBusinessInfo(SetBusinessInfoArgs e)
        {

            // 复制界面元数据到本地变量
            FormMetadata currMeta = (FormMetadata)ObjectUtils.CreateCopy(
                this.View.OpenParameter.FormMetaData);
            _currInfo = currMeta.BusinessInfo;
            _currLayout = currMeta.GetLayoutInfo();
            // 用本地的元数据,替换动态表单引擎持有的元数据
            e.BusinessInfo = _currInfo;
            e.BillBusinessInfo = _currInfo;
        }
        /// <summary>
        /// 初始化界面元数据时触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 通常在此事件中,修改界面元数据;
        /// 本示例,在此事件中,把界面元数据复制到本地,避免与其他实例公用元数据,造成串账
        /// </remarks>
        public override void OnSetLayoutInfo(SetLayoutInfoArgs e)
        {

            e.LayoutInfo = _currLayout;
            e.BillLayoutInfo = _currLayout;

        }
        private HashSet<string> _loadedNodeIds = new HashSet<string>();
        private Dictionary<string, NodeInfo> _dctNodes = new Dictionary<string, NodeInfo>();

        public override List<TreeNode> GetTreeViewData(TreeNodeArgs e)
        {
            if (e.Key.Equals("F_PAEZ_TREEVIEW") == false)
            {
                // 需加载是其他树控件的节点,略过
                return new List<TreeNode>();
            }

            // 加载全部节点信息到内存
            //this.LoadNodes();
            queryNodeComparny(0);

            // 记录已经加载过根节点
            this._loadedNodeIds.Add("0");

            // 展开树控件节点
            TreeView tv = this.View.GetControl<TreeView>("F_PAEZ_TreeView");
            tv.SetExpanded(true);

            // 构造根目录下的第一层节点并返回
            List<TreeNode> nodes = this.BuildTreeNodes("0");
            return nodes;
        }

        public override void TreeNodeClick(TreeNodeArgs e)
        {

            if (e.Key.Equals("F_PAEZ_TREEVIEW") == false)
            {
                // 点击的是其他树控件,略过
                return;
            }
            // 判断是否已经加载过此节点的子节点,如果加载过,则不再加载
            if (!this._loadedNodeIds.Contains(e.NodeId))
            {
                //return;
                this._loadedNodeIds.Add(e.NodeId);
                TreeView tv = this.View.GetControl<TreeView>("F_PAEZ_TREEVIEW");
                string parentId = e.NodeId;
                if (parentId.StartsWith("more"))
                {// 当前点击的节点,是"点击加载更多..."
                    string[] keys = parentId.Split('|');
                    parentId = keys[1];   // 第2部分为父节点部分
                    // "点击加载更多..."节点已经被点击过,不再需要了,移除之
                    tv.RemoveNode(e.NodeId);
                }
                // 开始加载更多的子节点
                List<TreeNode> childNodes = this.BuildTreeNodes(parentId);
                if (childNodes.Count > 0)
                {
                    tv.AddNodes(parentId, childNodes);
                }
            }
            SetEntityData(e.NodeId);
        }

        private List<TreeNode> BuildTreeNodes(string parentId)
        {
            _dctNodes.Clear();
            queryNodeComparny(Convert.ToInt32(parentId));
            List<TreeNode> nodes = new List<TreeNode>();
            // 遍历全部节点,找指定节点中,未加载的子节点的子节点
            int count = 0;
            int index = 0;
            foreach (var item in _dctNodes)
            {
                NodeInfo nodeInfo = item.Value;
                if (nodeInfo.Loaded == false
                    && nodeInfo.ParentId == parentId)
                {
                    nodeInfo.Loaded = true;
                    count ;
                    TreeNode node = new TreeNode()
                    {
                        id = nodeInfo.Id,
                        text = nodeInfo.Caption,
                        parentid = nodeInfo.ParentId,
                    };
                    nodes.Add(node);
                }
                index ;
            }

            return nodes;
        }

        private void queryNodeComparny(int nodeId)
        {
            int fid;
            int parentId;
            string node;
            string sql = "select a.FID,b.FNAME,a.FPARENTID from T_BD_MATERIALGROUP a left join T_BD_MATERIALGROUP_L b on a.FID = b.FID where a.FPARENTID = '" nodeId "' order by a.FPARENTID ";
            DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context,sql);
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i )
                {
                    fid = Convert.ToInt32(ds.Tables[0].Rows[i]["FID"].ToString());
                    parentId = Convert.ToInt32(ds.Tables[0].Rows[i]["FPARENTID"].ToString());
                    node = ds.Tables[0].Rows[i]["FNAME"].ToString();
                    _dctNodes.Add(fid.ToString(), new NodeInfo() { Id = fid.ToString(),ParentId = parentId.ToString(),Caption = node});
                }
            }

        }

        public void SetEntityData(string NodeId)
        {
            string Sql = "";
            int FOriEntryCount = 0;
            FOriEntryCount = this.View.Model.GetEntryRowCount("F_PAEZ_Entity");
            if (FOriEntryCount > 0)
            {
                for (int i = FOriEntryCount - 1; i >= 0; i--)
                {
                    this.View.Model.DeleteEntryRow("F_PAEZ_Entity", i);
                }
            }
            Sql = "select a.FMATERIALID,a.FNUMBER,b.FNAME,b.FSPECIFICATION from T_BD_MATERIAL a left join T_BD_MATERIAL_L b on a.FMATERIALID = b.FMATERIALID ";
            Sql = "where FMATERIALGROUP = '" NodeId "'";
            DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context,Sql);
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i )
                {
                    this.View.Model.CreateNewEntryRow("F_PAEZ_Entity");
                    this.View.Model.SetValue("FMATID", ds.Tables[0].Rows[i]["FMATERIALID"].ToString(), i);
                    this.View.Model.SetValue("FMATNO", ds.Tables[0].Rows[i]["FNUMBER"].ToString(), i);
                    this.View.Model.SetValue("FMATNAME", ds.Tables[0].Rows[i]["FNAME"].ToString(), i);
                    this.View.Model.SetValue("FMODEL", ds.Tables[0].Rows[i]["FSPECIFICATION"].ToString(), i);
                }
                this.View.SetEntityFocusRow("F_PAEZ_Entity", 0);
            }
        }
    }

    public class NodeInfo
    {
        /// <summary>
        /// 本节点Id
        /// </summary>
        public string Id { get; set; }
        /// <summary>
        /// 父节点Id
        /// </summary>
        public string ParentId { get; set; }
        /// <summary>
        /// 本节点标题
        /// </summary>
        public string Caption { get; set; }
        /// <summary>
        /// 是否已经加载标志:默认为false,未加载到前端
        /// </summary>
        public bool Loaded { get; set; }
    }
}


标签: K3Cloud

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警