Example #1
0
        private void InitModel(string modelname)
        {
            CustomClassCache.DelComboCache();

            /* remoting
             * string sql = string.Format("SELECT * FROM sys_modl_def WHERE modelname_en='{0}'", modelname);
             * DataTable tbl = Helper.GetDataTable(sql, Conn);
             */

            string    filter = string.Format("modelname_en='{0}'", modelname);
            DataTable tbl    = Helper.GetDataTableProxy("sys_modl_def", filter, null, Conn);

            DataRow row     = tbl.Rows[0];
            string  modl_id = row["id"].ToString();

            // 模块id
            ModID = Convert.ToInt32(modl_id);

            //不检查调试库中的内容
            if (MainForm.conn.Database.ToString().ToLower() != "s3design" && MainForm.conn.Database.ToString().ToLower() != "s3design_debug")
            {
                // 当前用户能否执行保存命令

                /* remoting
                 * sql = string.Format("SELECT * FROM sys_useracl_desc WHERE userindex = {0} AND moduleid = {1} AND canwrite = 1", Program.m_rightmgr._userindex, this.ModID);
                 * DataTable tbl_acl_desc = Helper.GetDataTable(sql, Conn);
                 */

                filter = string.Format("userindex = {0} AND moduleid = {1} AND canwrite = 1", Program.m_rightmgr._userindex, this.ModID);
                DataTable tbl_acl_desc = Helper.GetDataTableProxy("sys_useracl_desc", filter, null, Conn);


                if (tbl_acl_desc.Rows.Count > 0)
                {
                    this.CanSaveDB = true;
                }

                // 当前用户能否配置表元

                /* remoting
                 * sql = string.Format("SELECT * FROM sys_useracl_desc WHERE userindex = {0} AND moduleid = {1} AND canconfigmeta = 1", Program.m_rightmgr._userindex, this.ModID);
                 * tbl_acl_desc = Helper.GetDataTable(sql, Conn);
                 */

                filter       = string.Format("userindex = {0} AND moduleid = {1} AND canconfigmeta = 1", Program.m_rightmgr._userindex, this.ModID);
                tbl_acl_desc = Helper.GetDataTableProxy("sys_useracl_desc", filter, null, Conn);

                if (tbl_acl_desc.Rows.Count > 0)
                {
                    this.CanCfg = true;
                }
            }

            // 模块名
            ModelName      = modelname;
            this.bar1.Text = ModelName + "树";

            // 模块中文名
            this.Text = ModelName;

            // 主表名

            /*
             * sql = string.Format("SELECT * FROM sys_modl_tab_def WHERE modid='{0}'", modl_id);
             * DataTable tbl_tab_def = Helper.GetDataTable(sql, Conn);
             */

            filter = string.Format("modid='{0}'", modl_id);
            DataTable tbl_tab_def = Helper.GetDataTableProxy("sys_modl_tab_def", filter, null, Conn);


            if (tbl_tab_def.Rows.Count < 1)
            {
                MessageBox.Show("在表 sys_modl_tab_def 中找不到模块的信息。请检查相关数据表。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            DataRow row_tab = tbl_tab_def.Rows[0];

            MainTableName = row_tab["tablename"].ToString().Trim();

            // 主表
            //TblMain = Helper.GetDataTable("SELECT * FROM " + MainTableName, Conn);

            //TblMain = Helper.GetDataTableProxy(MainTableName, Conn);
            TblMain = Helper.GetDataTableTopRowProxy(MainTableName, Conn);

            HasDefaultRow = Helper.HasTableDefaultRow(MainTableName, Conn);

            // 显示的字段
            DisplayField = row_tab["display_field"].ToString().Trim();

            // tree分类的字段们
            CatFields = row_tab["catfields"].ToString().Trim().Split(new char[] { ',' });

            // 显示字段也用来作分类吗
            CatfieldsContainsDisplayfield = false;
            foreach (string str in CatFields)
            {
                if (str == DisplayField)
                {
                    CatfieldsContainsDisplayfield = true;
                    break;
                }
            }
            ArrayList arrDBPrimaryKey = new ArrayList();

            // 显示字段是key
            foreach (DataColumn col in TblMain.PrimaryKey)
            {
                if (col.ColumnName == DisplayField)
                {
                    KeysContainsDisplayfileld = true;
                    //break;
                }
                arrDBPrimaryKey.Add(col.ColumnName);
            }
            // 分类字段中有key吗
            foreach (DataColumn col in TblMain.PrimaryKey)
            {
                foreach (string strCat in CatFields)
                {
                    if (strCat == col.ColumnName)
                    {
                        CatFieldsContainsKey = true;
                        break;
                    }
                }
            }
            if (CatFieldsContainsKey)
            {
                for (int i = 0; i < TblMain.PrimaryKey.Length; i++)
                {
                    string strkey        = TblMain.PrimaryKey[i].ColumnName;
                    bool   bThisKeyInCat = false;
                    foreach (string strCat in CatFields)
                    {
                        if (strkey == strCat)
                        {
                            bThisKeyInCat = true;
                        }
                    }
                    if (!bThisKeyInCat)
                    {
                        ToChangeIndex = i;
                        break;
                    }
                }
            }

            // 新建记录时的起始 id
            UpdateStartIDs();

            // 分页们
            m_Pages = new ArrayList();
            bool bFirstTab = true;

            foreach (DataRow r in tbl_tab_def.Rows)
            {
                bool bCustom = false;
                if (r["custom_tab"] != DBNull.Value)
                {
                    bCustom = (r["custom_tab"].ToString().Trim() == "1");
                }

                PageDesc tab = new PageDesc();
                tab.id         = Convert.ToInt32(r["modtabid"]);
                tab.name_cn    = r["name"].ToString();
                tab.bCustomTab = bCustom;

                if (!bCustom)
                {
                    tab.pg = new PropertyGrid();
                    this.contextMenuBar1.SetContextMenuEx(tab.pg, this.cmScriptOp);
                }

                AddTab(ref tab, bFirstTab);
                bFirstTab = false;

                tab.dbClass               = new DBCustomClass(null, m_lua, tab.id, -1);
                tab.Properties            = tab.dbClass;
                tab.dbClass.OnAsynNotify += new DBCustomClass.AsynNotifyHandler(OnAsynNotify);
                //todo:增加子结点中的Onasynnotify
                m_Pages.Add(tab);
            }
            if (arrDBPrimaryKey.Count > 0)
            {
                m_recLock = new RecordLockEx(Conn, MainTableName, (string[])arrDBPrimaryKey.ToArray(typeof(string)), ModID);
            }
        }
Example #2
0
        private void InitMetaInfo(object parent, LuaEx lua, int nTabId, int nParentFieldId)
        {
            m_findkeyvalues = null;            
            m_lua = lua;

            // 根据ParentFieldid不同,获取结果完全不同 = -1表示第一层
            string strParentField = nParentFieldId >= 0 ? " AND parentfield=" + nParentFieldId : "AND (parentfield IS NULL OR parentfield = '0')";
            
            // 根据TabId 获取主模块id
            DataTable tbl = CustomClassCache.GetModTabDefProxy("sys_modl_tab_def", string.Format("SELECT modid FROM sys_modl_tab_def WHERE modtabid = {0}", nTabId));
            int nModalId = int.Parse(tbl.Rows[0][0].ToString());
            
            // 获取本Tab页主表名
            tbl = CustomClassCache.GetModTabDefProxy("sys_modl_tab_def", string.Format("SELECT tablename, catfields FROM sys_modl_tab_def WHERE modid = {0} AND modtabid = {1}", nModalId, nTabId));
            m_TabMainTableName = tbl.Rows[0]["tablename"].ToString().Trim(); // no lower here.            
            
            if (nParentFieldId < 0)
            {
                m_strCats = GetFieldStr(tbl.Rows[0], "catfields").Split(new char[] { ',' });
            }
            
            // 获取本层主表名
            string currentTableName = null;
            tbl = CustomClassCache.GetModTabDefProxy("sys_meta_info", string.Format("SELECT tablename, fieldname FROM sys_meta_info WHERE fieldid = {0}", nParentFieldId));                            
            
            if (tbl.Rows.Count > 0)
            {
                currentTableName = tbl.Rows[0]["tablename"].ToString().Trim(); // no lower here.
            }            

            if (nParentFieldId >= 0)
            {
                m_strMainTableName = currentTableName;
            }
            else
            {
                m_strMainTableName = m_TabMainTableName;
            }

            // 生成 metainfo SQL语句, 只选择当前可见的字段
            m_strMetaSql = string.Format("SELECT * FROM sys_meta_info WHERE modtabid = {0} {1} ORDER BY {2}", nTabId, strParentField, "orderno");
            DataTable metatbl = CustomClassCache.GetDbMetaInfoProxy("sys_meta_info", m_strMetaSql);

            // visible设置不可用,隐藏之后会找不到该字段
            StringBuilder visibleFields = new StringBuilder();

            if (m_strMainTableName != m_TabMainTableName) // 和模块主表相同则直接从Cache里取记录即可
            {
                List<string> visibleFieldList = new List<string>();
                List<string> primaryKeyList = CustomClassCache.GetPrimaryKeys(m_strMainTableName);

                foreach (DataRow row in metatbl.Rows)
                {
                    string fieldType = row["fieldtype"].ToString();

                    if (fieldType != "1")
                    {
                        visibleFieldList.Add(GetFieldStr(row, "fieldname"));
                    }
                    else
                    {                        
                        // 虚拟字段需要读取关联条件相关字段的信息
                        List<string> splitFiledList = GetSplitField(row["subtablefilter"].ToString(), false);

                        foreach (string s in splitFiledList)
                        {
                            if (!visibleFieldList.Contains(s))
                            {
                                visibleFieldList.Add(s);
                            }
                        }                        
                    }
                }
               
                // 需要读父结点的关联信息
                if (parent != null && (parent as DBCustomClass).m_nParentFieldType == 1)
                {
                    tbl = CustomClassCache.GetDbMetaInfoProxy("sys_meta_info", string.Format("SELECT subtablefilter FROM sys_meta_info WHERE fieldid = '{0}'", nParentFieldId.ToString()));

                    List<string> splitFiledList = GetSplitField(tbl.Rows[0]["subtablefilter"].ToString(), true);

                    foreach (string s in splitFiledList)
                    {
                        if (!visibleFieldList.Contains(s))
                        {
                            visibleFieldList.Add(s);
                        }
                    }
                }                

                // 加入主键
                foreach (string s in primaryKeyList)
                {
                    string keyField = s.ToLower();

                    if (!visibleFieldList.Contains(keyField))
                    {
                        visibleFieldList.Add(keyField);
                    }
                }
 
                foreach (string s in visibleFieldList)
                {
                    visibleFields.Append(string.Format("[{0}],", s));
                }

                if (visibleFields.Length > 0)
                {
                    visibleFields.Remove(visibleFields.Length - 1, 1);
                }
            }
                        
            string strVisibleFeilds = visibleFields.ToString();          
            //m_strSql = string.Format("SELECT {1} FROM {0}", m_strMainTableName, strVisibleFeilds.Length > 0 ? strVisibleFeilds : "*");
            m_strSql = string.Format("SELECT {1} FROM {0}", m_strMainTableName, "*");
            m_nModlId = nModalId;
            m_nModlTabId = nTabId;
            m_nParentFieldId = nParentFieldId;
            m_parent = parent;
            
            // 查找主键
            m_strPrimaryKeys = GetPrimaryKeys();
            InitMetaInfo(m_strSql);

            // 初始化行锁
            m_reclock = new RecordLockEx(Conn, m_strMainTableName, m_strDBPrimaryKeys, m_nModlId);            
        }
Example #3
0
        private void InitModel(string modelname)
        {
            CustomClassCache.DelComboCache();
            /* remoting
            string sql = string.Format("SELECT * FROM sys_modl_def WHERE modelname_en='{0}'", modelname);
            DataTable tbl = Helper.GetDataTable(sql, Conn);
            */

            string filter = string.Format("modelname_en='{0}'", modelname);
            DataTable tbl = Helper.GetDataTableProxy("sys_modl_def", filter, null, Conn);

            DataRow row = tbl.Rows[0];
            string modl_id = row["id"].ToString();

            // 模块id
            ModID = Convert.ToInt32(modl_id);

            //不检查调试库中的内容
            if (MainForm.conn.Database.ToString().ToLower() != "s3design" && MainForm.conn.Database.ToString().ToLower() != "s3design_debug")
            {
                // 当前用户能否执行保存命令
                /* remoting
                sql = string.Format("SELECT * FROM sys_useracl_desc WHERE userindex = {0} AND moduleid = {1} AND canwrite = 1", Program.m_rightmgr._userindex, this.ModID);
                DataTable tbl_acl_desc = Helper.GetDataTable(sql, Conn);
                */

                filter = string.Format("userindex = {0} AND moduleid = {1} AND canwrite = 1", Program.m_rightmgr._userindex, this.ModID);
                DataTable tbl_acl_desc = Helper.GetDataTableProxy("sys_useracl_desc", filter, null, Conn);


                if (tbl_acl_desc.Rows.Count > 0)
                    this.CanSaveDB = true;

                // 当前用户能否配置表元
                /* remoting
                sql = string.Format("SELECT * FROM sys_useracl_desc WHERE userindex = {0} AND moduleid = {1} AND canconfigmeta = 1", Program.m_rightmgr._userindex, this.ModID);
                tbl_acl_desc = Helper.GetDataTable(sql, Conn);
                */

                filter = string.Format("userindex = {0} AND moduleid = {1} AND canconfigmeta = 1", Program.m_rightmgr._userindex, this.ModID);
                tbl_acl_desc = Helper.GetDataTableProxy("sys_useracl_desc", filter, null, Conn);

                if (tbl_acl_desc.Rows.Count > 0)
                    this.CanCfg = true;
            }

            // 模块名
            ModelName = modelname;
            this.bar1.Text = ModelName + "树";

            // 模块中文名
            this.Text = ModelName;

            // 主表名
            /*
            sql = string.Format("SELECT * FROM sys_modl_tab_def WHERE modid='{0}'", modl_id);
            DataTable tbl_tab_def = Helper.GetDataTable(sql, Conn);
            */

            filter = string.Format("modid='{0}'", modl_id);
            DataTable tbl_tab_def = Helper.GetDataTableProxy("sys_modl_tab_def", filter, null, Conn);


            if (tbl_tab_def.Rows.Count < 1)
            {
                MessageBox.Show("在表 sys_modl_tab_def 中找不到模块的信息。请检查相关数据表。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            DataRow row_tab = tbl_tab_def.Rows[0];
            MainTableName = row_tab["tablename"].ToString().Trim();

            // 主表
            //TblMain = Helper.GetDataTable("SELECT * FROM " + MainTableName, Conn);

            //TblMain = Helper.GetDataTableProxy(MainTableName, Conn);
           TblMain = Helper.GetDataTableTopRowProxy(MainTableName, Conn);

            HasDefaultRow = Helper.HasTableDefaultRow(MainTableName, Conn);

            // 显示的字段
            DisplayField = row_tab["display_field"].ToString().Trim();

            // tree分类的字段们
            CatFields = row_tab["catfields"].ToString().Trim().Split(new char[] { ',' });

            // 显示字段也用来作分类吗
            CatfieldsContainsDisplayfield = false;
            foreach (string str in CatFields)
            {
                if (str == DisplayField)
                {
                    CatfieldsContainsDisplayfield = true;
                    break;
                }
            }
            ArrayList arrDBPrimaryKey = new ArrayList();
            // 显示字段是key
            foreach (DataColumn col in TblMain.PrimaryKey)
            {
                if (col.ColumnName == DisplayField)
                {
                    KeysContainsDisplayfileld = true;
                    //break;
                }
                arrDBPrimaryKey.Add(col.ColumnName);
            }
            // 分类字段中有key吗
            foreach (DataColumn col in TblMain.PrimaryKey)
            {
                foreach (string strCat in CatFields)
                {
                    if (strCat == col.ColumnName)
                    {
                        CatFieldsContainsKey = true;
                        break;
                    }
                }
            }
            if (CatFieldsContainsKey)
            {
                for (int i = 0; i < TblMain.PrimaryKey.Length; i++)
                {
                    string strkey = TblMain.PrimaryKey[i].ColumnName;
                    bool bThisKeyInCat = false;
                    foreach (string strCat in CatFields)
                    {
                        if (strkey == strCat)
                        {
                            bThisKeyInCat = true;
                        }
                    }
                    if (!bThisKeyInCat)
                    {
                        ToChangeIndex = i;
                        break;
                    }
                }
            }

            // 新建记录时的起始 id
            UpdateStartIDs();

            // 分页们
            m_Pages = new ArrayList();
            bool bFirstTab = true;
            foreach (DataRow r in tbl_tab_def.Rows)
            {
                bool bCustom = false;
                if (r["custom_tab"] != DBNull.Value)
                    bCustom = (r["custom_tab"].ToString().Trim() == "1");

                PageDesc tab = new PageDesc();
                tab.id = Convert.ToInt32(r["modtabid"]);
                tab.name_cn = r["name"].ToString();
                tab.bCustomTab = bCustom;

                if (!bCustom)
                {
                    tab.pg = new PropertyGrid();
                    this.contextMenuBar1.SetContextMenuEx(tab.pg, this.cmScriptOp);
                }

                AddTab(ref tab, bFirstTab);
                bFirstTab = false;

                tab.dbClass = new DBCustomClass(null, m_lua, tab.id, -1);
                tab.Properties = tab.dbClass;
                tab.dbClass.OnAsynNotify += new DBCustomClass.AsynNotifyHandler(OnAsynNotify);
                //todo:增加子结点中的Onasynnotify
                m_Pages.Add(tab);
            }
            if (arrDBPrimaryKey.Count > 0)
                m_recLock = new RecordLockEx(Conn, MainTableName, (string[])arrDBPrimaryKey.ToArray(typeof(string)), ModID);
        }