示例#1
0
        public static DataRow GetPropDefaultValue(string tblname)
        {
            if (m_hasDefaultRow == null) // 只初始化一次即可
            {
                m_hasDefaultRow = new Hashtable();

                /*DataTable tempTable = Helper.GetDataTable(string.Format("SELECT tablename, hasdefaultrow FROM sys_table_cfg"), m_conn);*/

                DataTable tempTable = GetDataTableWithKeyProxy("sys_table_cfg");

                foreach (DataRow dataRow in tempTable.Rows)
                {
                    m_hasDefaultRow[dataRow["tablename"].ToString()] = dataRow["hasdefaultrow"].ToString();
                }
            }

            if (m_hasDefaultRow[tblname] == null || m_hasDefaultRow[tblname].ToString() != "True")
            {
                return(null);
            }

            if (m_htDefVal[tblname] == null)
            {
                // 默认行一般就是数据表的第一行,再检查一下主键是否都为0即可确定
                /*DataTable tbl = CustomClassCache.GetDataTableWithKey("SELECT top 1 * FROM " + tblname);*/
                DataTable tbl        = CustomClassCache.GetDataTableWithKeyTopRowProxy(tblname);
                string[]  def_keys   = new string[tbl.PrimaryKey.Length];
                DataRow   defaultRow = tbl.Rows[0];
                bool      valid      = true;

                for (int i = 0; i < def_keys.Length; i++)
                {
                    if (defaultRow[tbl.PrimaryKey[i]].ToString() != "0")
                    {
                        valid = false;
                        break;
                    }
                }

                if (valid)
                {
                    if (m_htDefVal.Keys.Count > defValCacheSize)
                    {
                        m_htDefVal.Clear();
                    }

                    m_htDefVal[tblname] = defaultRow;
                }
                else
                {
                    defaultRow = null;
                }

                return(defaultRow);
            }
            else
            {
                return((DataRow)(m_htDefVal[tblname]));
            }
        }
示例#2
0
 private void CheckClientVer()
 {
     //检查DUMMY表,仅用于强行使用户不能使用旧版本的客户端程序
     /*System.Data.DataTable tbldummy = CustomClassCache.GetDataTableWithKey("select * from sys_dummy_1");*/
     System.Data.DataTable tbldummy = CustomClassCache.GetDataTableWithKeyProxy("sys_dummy_1");
     tbldummy.Dispose();
 }
示例#3
0
        private void CheckACL()
        {
            //if (MainForm.conn.Database.ToString().ToLower() == "s3design" || MainForm.conn.Database.ToString().ToLower() == "s3design_debug")
            //{
            //    return; //不检查调试库中的内容
            //}

            CheckClientVer();

            //检查是否用户访问列表中的用户,否则拒绝进入
            string strHost = Helper.GetHostName().ToLower();
            string _sql    = string.Format("SELECT * FROM sys_useracl WHERE userid = '{0}'", strHost);
            /*System.Data.DataTable tbl = CustomClassCache.GetDataTableWithKey(_sql);*/
            string filter = string.Format("userid = '{0}'", strHost);

            System.Data.DataTable tbl = CustomClassCache.GetDataTableWithKeyProxy("sys_useracl", filter, null);

            //System.Data.DataRow row = null;
            bool bFind = false;

            System.Net.IPAddress[] ips = Helper.GetIPAddresses();
            foreach (System.Data.DataRow r in tbl.Rows)
            {
                foreach (System.Net.IPAddress ip in ips)
                {
                    if (r["ip"].ToString().Trim() == ip.ToString())
                    {
                        bFind = true;

                        // 更新信息
                        _hostname  = Helper.GetHostName();
                        _ip        = Helper.GetIPAddress();
                        _userindex = r["_index"].ToString().Trim();
                        //todo: 以后要从本地ini取
                        _username = string.Empty;
                        _psw      = string.Empty;

                        break;
                    }
                }
            }
            if (!bFind)
            {
                throw new Exception("无权访问!");
            }
        }
示例#4
0
 static public void InitConn()
 {
     if (Program.EnableRemoting)
     {
         if (!DataTableServerProxy.IsInit)
         {
             DataTableServerProxy.InitServerProxy(Application.ExecutablePath + ".config", Program.Database);
         }
         m_strconn = DataTableServerProxy.GetDBSourceString();
         Program.ConnetionString = m_strconn;
         conn = new SqlConnection(m_strconn);
         DataTableServerProxy.GetDataTableProxy().InitRemoting(conn);
     }
     else
     {
         m_strconn = Program.ConnetionString;
         conn      = new SqlConnection(m_strconn);
     }
     CustomClassCache.Conn = conn;
     CustomClassCache.DelAllCaches();
     //add by cuiwei 07.10.16
     DBProcess.SetConnection(conn);
     //add end
 }
示例#5
0
        /*
         * private void InitUserAclDesc()
         * {
         *
         *  conn.Open();
         *  SqlCommand sqlCmd = new SqlCommand("delete from sys_useracl_desc", conn);
         *  sqlCmd.ExecuteNonQuery();
         *  sqlCmd.Dispose();
         *  conn.Close();
         *
         *  DataTable tblAcl = Helper.GetDataTable("select userid,_index from sys_useracl", conn);
         *  DataTable tblModl = Helper.GetDataTable("select id,modelname_en from sys_modl_def", conn);
         *  DataTable tblAclDesc = Helper.GetDataTable("select * from sys_useracl_desc", conn);
         *  SqlDataAdapter adp = new SqlDataAdapter("select * from sys_useracl_desc", conn);
         *
         *  foreach (DataRow rowAcl in tblAcl.Rows)
         *  {
         *      foreach (DataRow rowModl in tblModl.Rows)
         *      {
         *          DataRow rowDesc = tblAclDesc.NewRow();
         *          rowDesc.BeginEdit();
         *          rowDesc["userindex"] = rowAcl["_index"];
         *          rowDesc["moduleid"] = rowModl["id"];
         *          rowDesc["groupname"] = "";
         *          rowDesc["modulename_en"] = rowModl["modelname_en"];
         *          rowDesc["canread"] = 1;
         *          rowDesc["canwrite"] = 1;
         *          rowDesc["canimport"] = 1;
         *          rowDesc["canconfigmeta"] = 1;
         *          rowDesc.EndEdit();
         *          tblAclDesc.Rows.Add(rowDesc);
         *      }
         *  }
         *
         *  SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adp);
         *  adp.InsertCommand = cmdBuilder.GetInsertCommand();
         *  int val = adp.Update(tblAclDesc);
         *  tblAclDesc.AcceptChanges();
         * }
         * private void InitUserAclDesc2()
         * {
         *
         *  DataTable tblAcl = Helper.GetDataTable("select userid,_index from sys_useracl", conn);
         *  SqlDataAdapter adp = new SqlDataAdapter("select * from sys_useracl_desc", conn);
         *  DataTable tblAclDesc = Helper.GetDataTable("select * from sys_useracl_desc", conn);
         *  foreach (DataRow rowDesc in tblAclDesc.Rows)
         *  {
         *      rowDesc.BeginEdit();
         *      int userid = Convert.ToInt32(rowDesc["userindex"]);
         *      string username = tblAcl.Rows.Find(userid)["userid"].ToString().Trim();
         *      string s = username.Substring(0, 1).ToLower();
         *      if (string.Compare(s, "j") <= 0)
         *          rowDesc["groupname"] = "A - J";
         *      else if (string.Compare(s, "s") <= 0)
         *          rowDesc["groupname"] = "K - S";
         *      else if (string.Compare(s, "x") <= 0)
         *          rowDesc["groupname"] = "T - X";
         *      else
         *          rowDesc["groupname"] = "Y - Z";
         *      rowDesc.EndEdit();
         *
         *  }
         *  SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adp);
         *  adp.UpdateCommand = cmdBuilder.GetUpdateCommand();
         *  int val = adp.Update(tblAclDesc);
         *  tblAclDesc.AcceptChanges();
         * }
         *
         * private void GenQuestText()
         * {
         *  string Output = "剑侠情缘网络版叁 任务脚本\r\n\r\n\r\n";
         *
         *  StringBuilder sb = new StringBuilder();
         *  DataTable tblQuest = Helper.GetDataTable("select questname, objective, description, dunningdialogue, unfinisheddialogue, finisheddialogue from tbl_quests order by class, questid", conn);
         *  foreach (DataRow row in tblQuest.Rows)
         *  {
         *      if (row["QuestName"].ToString().Length != 0)
         *      {
         *          sb.Append("任务名称:");
         *          sb.Append(row["QuestName"].ToString());
         *          sb.Append("\r\n任务目标:");
         *          sb.Append(row["Objective"].ToString());
         *          sb.Append("\r\n任务描述:");
         *          sb.Append(row["Description"].ToString());
         *          sb.Append("\r\n未完成对话1:");
         *          sb.Append(row["DunningDialogue"].ToString());
         *          sb.Append("\r\n未完成对话2:");
         *          sb.Append(row["UnfinishedDialogue"].ToString());
         *          sb.Append("\r\n完成对话:");
         *          sb.Append(row["FinishedDialogue"].ToString());
         *          sb.Append("\r\n\r\n");
         *      }
         *  }
         *
         *  Output += sb.ToString();
         *  Output = Output.Replace("<G>", string.Empty);
         *  Output = Output.Replace("\\n", string.Empty);
         *  Output = Output.Replace("<C>", string.Empty);
         *  Output = Output.Replace("<H28>", string.Empty);
         *  Output = Output.Replace("<N>", string.Empty);
         *  FileFolderHelper.StringToFile(Output, "c:/q.txt");
         * }
         * private void GenNpcText()
         * {
         *  string Output = "剑侠情缘网络版叁 任务脚本\r\n\r\n\r\n";
         *
         *  StringBuilder sb = new StringBuilder();
         *  DataTable tblNpc = Helper.GetDataTable("select name, idledialog1, idledialog2, idledialog3, idledialogafterquest from npctemplate order by mapname, id", conn);
         *  foreach (DataRow row in tblNpc.Rows)
         *  {
         *      if (row["IdleDialog1"].ToString().Length != 0)
         *      {
         *          sb.Append("NPC名称:");
         *          sb.Append(row["Name"].ToString());
         *          sb.Append("\r\n待机对话1:");
         *          sb.Append(row["IdleDialog1"].ToString());
         *          sb.Append("\r\n待机对话2:");
         *          sb.Append(row["IdleDialog2"].ToString());
         *          sb.Append("\r\n待机对话3:");
         *          sb.Append(row["IdleDialog3"].ToString());
         *          sb.Append("\r\n任务后待机对话:");
         *          sb.Append(row["IdleDialogAfterQuest"].ToString());
         *          sb.Append("\r\n\r\n");
         *      }
         *  }
         *
         *  Output += sb.ToString();
         *  Output = Output.Replace("<G>", string.Empty);
         *  Output = Output.Replace("\\n", string.Empty);
         *  Output = Output.Replace("<C>", string.Empty);
         *  Output = Output.Replace("<H28>", string.Empty);
         *  Output = Output.Replace("<N>", string.Empty);
         *  FileFolderHelper.StringToFile(Output, "c:/n.txt");
         * }
         * private void OldIpToNewIp()
         * {
         *  string sql = "select * from sys_useracl";
         *  SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
         *  DataTable tbl = Helper.GetDataTable(sql, conn);
         *  foreach (DataRow row in tbl.Rows)
         *  {
         *      string hostname = row["userid"].ToString().Trim();
         *      System.Net.IPHostEntry ipEntry = null;
         *      try
         *      {
         *          ipEntry = System.Net.Dns.GetHostByName(hostname);
         *      }
         *      catch (Exception ex)
         *      {
         *          if ((ex as System.Net.Sockets.SocketException) != null)
         *              ipEntry = null;
         *      }
         *      if (ipEntry == null)
         *          continue;
         *
         *      //获取IP地址列表
         *      foreach (System.Net.IPAddress ip in ipEntry.AddressList)
         *      {
         *          string strIp = ip.ToString();
         *          if (strIp.StartsWith("10.20."))
         *          {
         *              row["ip"] = strIp;
         *          }
         *      }
         *
         *  }
         *
         *  SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adp);
         *  adp.UpdateCommand = cmdBuilder.GetUpdateCommand();
         *  int val = adp.Update(tbl);
         *  tbl.AcceptChanges();
         * }
         */
        private void MainForm_Load(object sender, EventArgs e)
        {
            //InitUserAclDesc();
            //InitUserAclDesc2();
            //GenQuestText();
            //GenNpcText();
            //OldIpToNewIp();

            //Helper.LockWndUpdate(this);
            try
            {
                //System.Diagnostics.Process.Start("regsvr32.exe   /s", "atlax.dll");

                //InitConn();

                tabStrip1.MdiForm = this;
                m_debugform       = new ScriptDebugForm();
                m_codeform        = new ScriptCodeForm(this);

                // 从sys_modl_def读取功能模块信息 只列出来该用户可读的
                string sql;
                if (Program.m_bUseNewAcl)
                {
                    sql = string.Format("SELECT * FROM sys_modl_def WHERE (id IN (SELECT moduleid FROM sys_useracl_desc WHERE userindex = {0} AND canread = 1))", Program.m_rightmgr._userindex);
                }
                else
                {
                    sql = "SELECT * FROM sys_modl_def";
                }

                string[]  names = new string[] { "sys_modl_def", "sys_useracl_desc" };
                DataTable tbl   = Helper.GetDataTableWithSqlProxy(names, sql, conn);
                cmdModels = new ButtonItem[tbl.Rows.Count];
                int i = 0;
                // 绑定新的点击事件处理方法
                customizeItem1.Click += new EventHandler(bConfigModel_Click);

                foreach (DataRow row in tbl.Rows)
                {
                    cmdModels[i] = new ButtonItem();
                    this.moduletoolbar.Items.AddRange(new BaseItem[] { cmdModels[i] });
                    cmdModels[i].Name       = "cmd" + row["modelname_en"] + "editor";
                    cmdModels[i].GlobalName = cmdModels[i].Name;
                    //cmdModels[i].ImageIndex = Convert.ToInt32(row["iconid"]);
                    if (Convert.ToInt32(row["iconid"]) < imageList2.Images.Count)
                    {
                        if (Convert.ToInt32(row["iconid"]) == -1) // 自定义图标
                        {
                            cmdModels[i].Image = GetImageFromDataBase(row);
                        }
                        else
                        {
                            cmdModels[i].Image = imageList2.Images[Convert.ToInt32(row["iconid"])];
                        }
                    }
                    cmdModels[i].PopupAnimation = DevComponents.DotNetBar.ePopupAnimation.SystemDefault;
                    if (!(row["displaystyle"] is DBNull)) // 自定义显示样式不为空
                    {
                        cmdModels[i].Text    = row["displaytext"].ToString();
                        cmdModels[i].Tooltip = row["modelname_en"].ToString();

                        switch (row["displaystyle"].ToString())
                        {
                        case "0":     // 默认样式
                        {
                            cmdModels[i].ButtonStyle = eButtonStyle.Default;
                            break;
                        }

                        case "1":     // 单一文本
                        {
                            cmdModels[i].ButtonStyle = eButtonStyle.TextOnlyAlways;
                            break;
                        }

                        case "2":     // 图文混合
                        {
                            cmdModels[i].ButtonStyle = eButtonStyle.ImageAndText;
                            break;
                        }
                        }
                    }
                    else
                    {
                        cmdModels[i].Text    = row["modelname_en"].ToString();
                        cmdModels[i].Tooltip = cmdModels[i].Text;
                    }

                    cmdModels[i].Click += new System.EventHandler(this.cmdNewModelEditor_Click);
                    imageTable[row["id"].ToString()] = cmdModels[i]; // 记录模块id对应的Button
                    cmdModels[i].Tag = row["id"].ToString();         // 记录该模块的id
                }
                moduletoolbar.RecalcLayout();
                FileInfo _fi = new FileInfo("_layout.xml");
                FileInfo fi  = new FileInfo("layout.xml");
                if (_fi.Exists)
                {
                    dotNetBarManager1.LoadLayout("_layout.xml"); // 读取布局设置
                }
                else if (fi.Exists)
                {
                    dotNetBarManager1.LoadLayout("layout.xml"); // 读取布局设置
                }

                // 从配置文件中读取模块显示的自定义内容
                ReloadButtonItems(LoadModelConfigInfo());

                //初始化状态条内容
                LDBName.Text   = conn.DataSource + " : " + conn.Database;
                LHostName.Text = Helper.GetHostName() + " : " + Helper.GetIPAddress();

                //谁要是再截屏,hehe
                try
                {
                    string strHost = Helper.GetHostName().ToLower();
                    string _sql    = string.Format("select * from sys_useracl where userid = '{0}'", strHost);

                    /*DataTable tbl_acl = CustomClassCache.GetDataTableWithKey(_sql);*/

                    string    filter  = string.Format("userid = '{0}'", strHost);
                    DataTable tbl_acl = CustomClassCache.GetDataTableWithKeyProxy("sys_useracl", filter, null);

                    DataRow row_acl = tbl_acl.Rows[0];
                    this.Text = string.Format("剑3游戏设计工具(1.0.2.{0})", row_acl["_index"].ToString().Trim());

                    if (Program.forPublic)
                    {
                        this.Text = string.Format("策划工具(1.0.2.{0})", row_acl["_index"].ToString().Trim());
                    }
                }
                catch (Exception)
                {
                    Helper.AddLog("出错啦~~~");
                }
            }
            catch (Exception ex)
            {
                Helper.AddLog(ex.Message);
                this.Close();
                throw;
            }
            finally
            {
                //Helper.LockWndUpdate(null);
            }
        }
示例#6
0
        public bool NewRow()
        {
            //先将主键值复制回来
            foreach (string key in m_htnewrow.Keys)
            {
                if (m_keyvalue.ContainsKey(key))
                {
                    m_keyvalue[key] = m_htnewrow[key];
                }
            }

            NewSubTalbeRecordCommand cmd = new NewSubTalbeRecordCommand();

            cmd.Execute();

            //GernateDefaultValue();//在外面调用,因脚本要干涉这个过程
            SqlDataAdapter adp = m_dbclass.DataAdapter;
            DataTable      tbl = m_dbclass.DataTable;

            try
            {
                DataRow newrow = tbl.NewRow();
                newrow.BeginEdit();
                InitNewRowValues(tbl, newrow);
                foreach (string fieldname in m_keyvalue.Keys)
                {
                    bool bIsAutoIncre = false;
                    for (int i = 0; i < m_dbclass.DBPrimaryKey.Length; i++)
                    {
                        if (m_dbclass.DBPrimaryKey[i].ToString().ToLower() == fieldname.ToLower())
                        {
                            bIsAutoIncre = IsAutoIncreamentField(m_dbclass.DBPrimaryKey[i].ToString());
                            break;
                        }
                    }
                    if (!bIsAutoIncre)
                    {
                        newrow[fieldname] = m_keyvalue[fieldname];
                    }
                }
                FillNewRowDefaultValues(tbl, newrow);

                tbl.Rows.Add(newrow);

                /* remoting
                 * SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adp);
                 * adp.InsertCommand = cmdBuilder.GetInsertCommand();
                 * int val = adp.Update(tbl);
                 * tbl.AcceptChanges();
                 */

                int val = Helper.SaveTable(tbl, m_dbclass.StrSql, MainForm.conn);

                CustomClassCache.DelAllDataTableCache(); //清除缓冲
            }
            catch (Exception ex)
            {
                tbl.RejectChanges();
                Helper.AddLog(ex.Message);
                return(false);
            }
            return(true);
        }
示例#7
0
        //生成新记录的默认值(主键值及其他字段值)
        public bool GernateDefaultValue()
        {
            DBCustomClass subdbclass = m_dbclass;

            string[] strSubReleations = subdbclass.GetKeyFromParentField(Convert.ToInt32(m_key), false);//获取关联关系的行数
            if (strSubReleations == null)
            {
                return(false);
            }

            switch (strSubReleations.Length)
            {
            case 0:     //无关联关系
                goto case 1;

            case 1:     //单行关联关系
                //主表关联字段内容要复制到子表对应字段
                if (m_dbclass.Parent != null)
                {
                    DBCustomClass parentClass = m_dbclass.Parent as DBCustomClass;
                    //Hashtable MainTableKeys = Helper.TransToHashTable(parentClass.DBPrimaryKey, true);
                    Hashtable subTableKeys      = Helper.TransToHashTable(m_dbclass.DBPrimaryKey, true);
                    Hashtable htSubReleations   = Helper.TransToHashTable(strSubReleations, true);
                    string[]  strMainReleations = subdbclass.GetKeyFromParentField(Convert.ToInt32(m_key), true);   //获取关联关系的行数
                    //填充主从表关联字段都为主键的内容
                    for (int i = 0; i < subdbclass.DBPrimaryKey.Length; i++)
                    {
                        string strKeyField = (string)subdbclass.DBPrimaryKey[i];
                        if (i > /*=*/ strSubReleations.Length)
                        {
                            m_keyvalue[strKeyField] = GetUnusedID(strKeyField);
                        }
                        else
                        {
                            string strMainField = string.Empty;     // = strMainReleations[i].ToLower();
                            string strSubField  = string.Empty;     // = strSubReleations[i].ToLower();
                            GetMainFieldAndSubField(ref strMainField, ref strSubField, strMainReleations, strSubReleations, strKeyField);

                            if (htSubReleations.Contains(strKeyField.ToLower()))
                            {    //如果从表主键字段在关联关系中,则为外键,需要使用主表字段值作为内容
                                //m_keyvalue[strKeyField] = parentClass.Value;      //使用主键字段值作为默认值
                                if (parentClass.ID != null && parentClass.ID.ToLower() == strMainField)
                                {
                                    m_keyvalue[strKeyField] = GetUnusedID(strKeyField, parentClass.Value);     //使用主表字段值作为默认值,如果子表已经存在则自动换为不存在的值
                                }
                                else
                                {
                                    m_keyvalue[strKeyField] = GetUnusedID(strKeyField, parentClass.GetFieldValue(strMainField));     //如果真实字段不是关联关系中的主表字段,则需要从数据库中读,todo:可能其他TAB页在内存中修改了这个值,则会有问题
                                }
                                m_newvalue[strMainField] = strSubField;
                                //m_newvalue[strKeyField.ToString]

                                /*
                                 * if (subdbclass.DBPrimaryKey.Length > 1)
                                 * {
                                 *  m_keyvalue[strKeyField] = parentClass.Value;
                                 * }
                                 * else
                                 * {
                                 *  string strmsg = string.Format("从表({0})的主键({1})在关联关系中,不能新建记录。请检查关联关系设置或者从表设置是否正确。",
                                 *      subdbclass.MainTable, strKeyField);
                                 *  System.Windows.Forms.MessageBox.Show(strmsg, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Stop);
                                 *  throw new Exception(strmsg);
                                 * }*/
                            }
                            else
                            {
                                //将从表每个主键字段生成现在没有ID值
                                m_keyvalue[strKeyField] = GetUnusedID(strKeyField);
                                // 必然s trMainField 和 strSubField 都是 string.empty, 算了
                                //m_newvalue[strMainField] = strSubField;
                            }
                        }
                    }
                    //当从表中的关联字段非主键时,也需要正确填充
                    for (int i = 0; i < strSubReleations.Length; i++)
                    {
                        string strsubfield = strSubReleations[i];

                        // 判断 strsubfield 是否是从表的 key
                        bool bIsSubKey = false;
                        foreach (object subDbKey in subdbclass.DBPrimaryKey)
                        {
                            if (strsubfield == subDbKey.ToString().ToLower())
                            {
                                bIsSubKey = true;
                                break;
                            }
                        }

                        if (!bIsSubKey)
                        {
                            if (parentClass.ID != null && parentClass.ID.ToLower() == strMainReleations[i])
                            {
                                m_keyvalue[strsubfield] = parentClass.Value;
                            }
                            else
                            {
                                m_keyvalue[strsubfield] = parentClass.GetFieldValue(strMainReleations[i]);
                            }
                        }
                    }
                }
                break;

            default:    //多行关联关系
                if (m_dbclass.Parent != null)
                {
                    DBCustomClass parentClass       = m_dbclass.Parent as DBCustomClass;
                    Hashtable     MainTableKeys     = Helper.TransToHashTable(parentClass.DBPrimaryKey, true);
                    Hashtable     subTableKeys      = Helper.TransToHashTable(m_dbclass.DBPrimaryKey, true);
                    string[]      strMainReleations = subdbclass.GetKeyFromParentField(Convert.ToInt32(m_key), true);//获取关联关系的行数

                    for (int i = 0; i < strMainReleations.Length; i++)
                    {
                        string strMainField         = strMainReleations[i].ToLower();
                        string strSubField          = strSubReleations[i].ToLower();
                        bool   bMainDBKey           = MainTableKeys.Contains(strMainField);
                        bool   bSubDBKey            = subTableKeys.Contains(strSubField);
                        string strSubDBKeyFieldName = subTableKeys[strSubField].ToString();
                        if (bMainDBKey && bSubDBKey)
                        {                                                                               //主从表字段都为主键,则使用主表字段内容作为默认值
                            m_keyvalue[strSubDBKeyFieldName] = parentClass.GetFieldValue(strMainField); //parentClass.Value; //parentClass[MainTableKeys[strMainField].ToString()];
                            m_newvalue[strMainField]         = strSubField;
                        }
                        else if (!bSubDBKey)
                        {    //从表为非主键,则默认值为默认行中的内容
                            DataRow def_row = CustomClassCache.GetPropDefaultValue(parentClass.MainTable);
                            if (def_row != null)
                            {
                                m_keyvalue[strSubDBKeyFieldName] = def_row[strSubDBKeyFieldName];
                            }
                        }
                        else if (bSubDBKey)
                        {    //主表字段非主键,从表字段为主键字段,则从表默认值为自动递增就可以了
                            m_keyvalue[strSubDBKeyFieldName] = GetUnusedID(strSubDBKeyFieldName, parentClass.GetFieldValue(strMainField));
                            m_newvalue[strMainField]         = strSubField;
                        }
                    }

                    // keys还是要全部填满,即使不在对应关系中。已修复,待测试。
                    foreach (object key in m_keyvalue.Keys)
                    {
                        if (m_keyvalue[key] == null)
                        {
                            m_keyvalue[key] = GetUnusedID(key.ToString(), 1000);
                            break;
                        }
                    }
                }
                break;
            }

            //return true;
            return(GernateDefaultRowValue()); //生成剩余其他的字段值
        }
示例#8
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);
            }
        }