卡片区多选参照使用案例分享

栏目:u9cloud知识作者:用友来源:用友发布:2024-08-20浏览:1

卡片区多选参照使用案例分享

效果如图:参照多选后,返回值直接以字符串拼接方式显示到参照字段上

 

开发实现:

实体设计

将参照字段在实体上修改为:ID,Code,Name三列,以字符串存储,并设置字段长度(默认50)

在UIModel上根据实体视图增加自定义字段,并设置字段类型为对应的实体档案

发布对象浏览器中找到实体类,拖拽到视图中对应的字段上即可。

新建多选参照(或者有已经存在的可用参照也可以)

这里要注意下:由于ID列是Long类型,要返回多行时,ID值就不能直接使用,需要从实体属性中找个字符串字段作为多选时ID的返回值字段(一般使用备注)

在参照扩展字段中增加以下逻辑(MulRefer类见文章最后)

  • 任意位置增加以下方法用于显示多选参照查询方案(多选参照默认不显示查询方案)

  • 在 DataGrid_GridRowDbClicked_Extend、ConfirmButton_Click_Extend 方法中增加以下代码,并注释掉方法体默认方法(DefaultImpl)

/// 当前Model,this.Model

        /// 当前界面,this

        /// 编码列,定义返回编码集合字符串值绑定列

        /// 名称列,定义返回名称集合字符串值绑定列

        /// ID列,定义返回ID集合字符串值绑定列

        MulRefer.ReturnMultiValueForInput(this.Model, this, "Code", "Name", "Description");

将UIModel上增加的自定义字段拖拽到卡片区,并将新建的多选参照进行绑定,此时把参照Code,Name,ID存放列的值绑定到对应实体字段上即可。

保存后数据加载处理

在BeforeUIModelBinding中增加对UIView中自定义字段的赋值逻辑,举例如下:

 

 

附MulRefer 类方法实例

    ///

    /// 多选参照特殊处理

    ///

    public class MulRefer

    {

        ///

        /// 卡片字段多选返回选定参照值

        ///

        /// 当前Model,this.Model

        /// 当前界面,this

        /// 编码列,定义返回编码集合字符串值绑定列

        /// 名称列,定义返回名称集合字符串值绑定列

        /// ID列,定义返回ID集合字符串值绑定列

        public static void ReturnMultiValueForInput(IUIModel model, BaseWebForm currPart, string codeColumnName,

            string nameColumnName, string idColumnName)

        {

            string returnXml = "";

            StringBuilder sbID = new StringBuilder();

            StringBuilder sbCode = new StringBuilder();

            StringBuilder sbName = new StringBuilder();

            IUIView refView = model.Views["cRef"];

            UIRuntimeHelper helper = UIRuntimeHelper.Instance;


 

            IList records = helper.GetSelectRecordFromCache(refView);


 

            int recordCount = records.Count;

            if (recordCount == 0)

                return;


 

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

            {

                if (sbID.Length != 0)

                {

                    sbID.Append(",");

                    sbCode.Append(",");

                    sbName.Append(",");

                }


 

                sbID.Append(records[i]["ID"].ToString());

                sbCode.Append(records[i][codeColumnName].ToString());

                object name = records[i][nameColumnName];

                string strName = string.Empty;

                if (name != null)

                {

                    strName = records[i][nameColumnName].ToString();

                }

                sbName.Append(strName);

            }


 

            returnXml += "";

            //如果只选中一条记录,则返回真实ID值

            if (recordCount == 1) {

                returnXml += "";

            }

            else

            {

                returnXml += "";

            }

            returnXml += "";

            returnXml += "";

            returnXml += "";

            returnXml += "";


 

            RegisterStartupScriptByReturnXml(currPart, returnXml);

        }


 

        ///

        /// 表格多选参照记录数据处理

        /// 调用此方法接收返回结果后,需把结果放到CurrentState中带回(this.CurrentState["XXX"] = MultiRefDatas),并自行关闭窗口(this.CloseDialog(true))

       ///

        /// 当前Model,this.Model

        /// Dictionary数组

        public static Dictionary[] ReturnMultiValueForGrid(IUIModel model)

        {

            IUIView view = model.Views["cRef"];

            if (view != null)

            {

                IList selectRecords = UIRuntimeHelper.Instance.GetSelectRecordFromCache(view);

                IUIFieldCollection fields = view.Fields;

                if (selectRecords.Count > 0)//多选

                {

                    //多选参照的返回值是一个Dictionary数组,

                    //数组中的每个元素就是参照中选中的一条记录

                    //Key是字段名,Value是字段值

                    Dictionary[] MultiRefDatas = new Dictionary[selectRecords.Count];

                    for (int i = 0; i < selectRecords.Count; i++)

                    {

                        Dictionary dic = new Dictionary();

                        MultiRefDatas[i] = dic;


 

                        for (int j = 0; j < fields.Count; j++)

                        {

                            string fieldName = fields[j].Name;

                            dic[fieldName] =

                            Convert.ToString(selectRecords[i][fieldName]);

                        }

                    }

                    return MultiRefDatas;

                }

                else//一条记录都不选就直接返回

                {

                    return null;

                }

            }

            else

            {

                return null;

            }

        }

        ///

        /// 注册脚本

        ///

        ///

        ///

        private static void RegisterStartupScriptByReturnXml(BaseWebForm currPart, string returnXml)

        {

            string xml = "";

            xml += returnXml;

            xml += "";

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xml);

            xml = doc.DocumentElement.OuterXml;

            //xml = xml.Replace(""", "'");

            xml = UFIDA.U9.UI.Commands.CommandHelper.EscapeHTML(xml);//编码

            string script = "";

            script += "window.returnValue = "" + xml + "";";

            script += "window.close();";

            script += "";

            AtlasHelper.RegisterAtlasStartupScript((Control)currPart.TopLevelContainer, currPart.GetType(), "ReferenceReturn", script, false);

        }

       

    }

 

卡片区多选参照使用案例分享

效果如图:参照多选后,返回值直接以字符串拼接方式显示到参照字段上 开发实现:实体设计将参照字段在实体上修改为:ID,Code,Name三列,...
点击下载文档
标签: # U9C
分享:
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息