简单模拟SQL视图管理工具原创
金蝶云社区-请输入昵称___
请输入昵称___
14人赞赏了该文章 1,154次浏览 未经作者许可,禁止转载编辑于2021年12月17日 14:57:42

本功能只为方便本地系统进行测试和学习,请勿在正式环境使用。

image.pngimage.png

有时候不方便直接连数据库的时候,需要执行或者查询一些命令时,就比较麻烦。而且测试发现,生成部署包或者直接导入SQL脚本都是不能执行SQL命令的。所以新增了个简单查询和执行SQL命令的功能。

如果是单表格,可以直接以表格形式显示数据。多表格只显示JSON格式。部分代码展示

image.png

 public bool IsXuhao = true;
        private void BindData(DataTable dt)
        {
            string[] fieldNames = new string[dt.Columns.Count];
           
            for (int i = 0; i < dt.Columns.Count; i++) {
                fieldNames[i] = dt.Columns[i].ColumnName;
            }
            var actionData = new JSONObject(); actionData["key"] = entityKey; 
            actionData["methodname"] = "CreateDyanmicList"; JSONArray coMeta = new JSONArray();                        
            coMeta.Add(GetColumns(fieldNames));         
            coMeta.Add("");           
            actionData["args"] = coMeta;   
             this.View.AddAction("InvokeControlMethod", actionData, x =>            {            
        var grid = this.View.GetControl<EntryGrid>(entityKey);                
              grid.SetData(GetEntityData(fieldNames,dt));            });
        }
        private JSONObject GetColumns(string[] fieldNames)
        {
            var entityAppearance = this.View.LayoutInfo.GetEntityAppearance(entityKey);
            var gridMeta = entityAppearance.CreateControl();
            gridMeta.Put("primaryKey", ExtConst.GRID_INDEX_FIELD_KEY);
            gridMeta.Put("indexKey", ExtConst.GRID_INDEX_FIELD_KEY);
            gridMeta.Put("startRow", 0);
            gridMeta.Put("pageSize", entityAppearance.PageRows);          
            var columns = (JSONArray)gridMeta["columns"];
            int sindex = 0;
            if (IsXuhao)
            {
                var col = new JSONObject();
                var xtype = "textfield";
                col.Put("xtype", xtype);
                col.Put("colIndex", 0);
                col.Put("dataIndex", "序号");
                col.Put("header", "序号");
                col.Put("width", "50");
                col.Put("visible", true);
                columns.Add(col); sindex = 1;
            }
            for (int i = 0; i < fieldNames.Length; ++i)
            {
                var fieldName = fieldNames[i];
                var col = new JSONObject();
                var xtype = "textfield";
                col.Put("xtype", xtype);
                col.Put("colIndex", i+sindex);
                col.Put("dataIndex", fieldName);
                col.Put("header", fieldName);
                col.Put("width", "100");
                col.Put("visible", true);
                // 如果需要某列的单元格可编辑,必须设置该列的编辑控件属性
                 col.Put("editor", CreateEditorControl(xtype));
                columns.Add(col);
            }

            return gridMeta;
        }
        private JSONObject CreateEditorControl(string xtype)
        {
            var ctlRet = new JSONObject();
            ctlRet.Put("xtype", xtype);
            ctlRet.Put("editable", true);
            return ctlRet;
        }

        /// <summary>
        /// 生成表格数据        
        /// </summary>
        /// <returns></returns>
        private JSONObject GetEntityData(string [] fieldNames ,DataTable dt)
        {
            var data = new JSONObject();
            var rows = new JSONArray();
            for (var x = 0; x < dt.Rows.Count; ++x)
            {
                var row = new JSONArray();
                //    row.Add(x);
                if (IsXuhao)
                {
                    row.Add(x + 1);
                }
                foreach (var fieldName in fieldNames)
                {
                    row.Add( dt.Rows[x][fieldName].ToString());
                }

                rows.Add(row);
            }

            data.Put("rows", rows);
            return data;
        }


赞 14