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])); } }
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(); }
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("无权访问!"); } }
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 }
/* * 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); } }
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); }
//生成新记录的默认值(主键值及其他字段值) 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()); //生成剩余其他的字段值 }
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); } }