using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Gs.DevApp.DevFrm.Sys { public partial class EasyCode : DevExpress.XtraEditors.XtraForm { public EasyCode() { InitializeComponent(); this.txt_sqlconn.Text = "Data Source=2kn4sh70028.vicp.fun,26144;Initial Catalog=gs_Mes;User ID=sa;Password =admin110"; getTable(); } /// /// 读取数据库表 /// private void getTable() { string strConn = txt_sqlconn.Text.Trim(); DataSet dset = new DataSet(); using (SqlConnection connection = new SqlConnection(strConn)) { connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT '--请选择--' as TABLE_NAME union all SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' order by TABLE_NAME desc"; using (SqlDataAdapter dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } if (dset != null && dset.Tables.Count > 0) { txt_table.DataSource = dset.Tables[0]; txt_table.DisplayMember = "TABLE_NAME"; txt_table.ValueMember = "TABLE_NAME"; txt_category.SelectedIndex = txt_table.SelectedIndex = 0; } } /// /// 选择生成路径 /// /// /// private void btnToPath_Click(object sender, EventArgs e) { string _GetfilePath = FileSelector.BrowseFilePathForSave(); txtCreateDBPath.Text = _GetfilePath; } private void btnOk_Click(object sender, EventArgs e) { if (txt_sqlconn.Text.Trim() == "") { MessageBox.Show("请输入数据库连接串"); return; } if (txt_table.SelectedIndex <= 0) { MessageBox.Show("请选择表"); return; } if (txt_category.SelectedIndex <= 0) { MessageBox.Show("请选择类型"); return; } if (txtCreateDBPath.Text.Trim() == "") { MessageBox.Show("请选择生成路径"); return; } DataTable dt = _getCol(); string _strName = _getClassName(); ReadMainFile(dt, _strName); ReadDesignerFile(dt, _strName); ReadResxFile(dt, _strName); string path = txtCreateDBPath.Text; lbMsg.Text = "生成成功,路径:" + path; } /// /// 读取列名 /// /// private DataTable _getCol() { string strConn = txt_sqlconn.Text.Trim(); DataSet dset = new DataSet(); using (SqlConnection connection = new SqlConnection(strConn)) { connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'" + txt_table.SelectedValue.ToString() + "'"; using (SqlDataAdapter dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } if (dset != null && dset.Tables.Count > 0) { return dset.Tables[0]; } return null; } /// /// 模版路径 /// /// cs,Designer.cs /// private string _getTemple(string fileType) { return (@"\templeEasyCode\category1\category1." + fileType); } /// /// 读取类名 /// /// private string _getClassName() { return "Frm" + txt_table.SelectedValue.ToString(); } /// /// 第一个文件 /// /// /// void ReadMainFile(DataTable dt, string _FileName) { string _Temppath = Application.StartupPath + _getTemple("cs"); string contents = System.IO.File.ReadAllText(_Temppath); string line = Environment.NewLine; StringBuilder strbuilder = new StringBuilder(); strbuilder.Append(contents); strbuilder.Replace("{clsName}", _getClassName()); string _fullPath = txtCreateDBPath.Text + "\\" + _FileName + ".cs"; if (System.IO.File.Exists(_fullPath)) System.IO.File.Delete(_fullPath); System.IO.StreamWriter sw = System.IO.File.CreateText(_fullPath); sw.Write(strbuilder.ToString()); sw.Close(); sw.Dispose(); } /// /// 第二个文件 /// /// /// void ReadDesignerFile(DataTable dt, string _FileName) { string _Temppath = Application.StartupPath + _getTemple("Designer.cs"); string contents = System.IO.File.ReadAllText(_Temppath); StringBuilder strbuilder = new StringBuilder(); string line = Environment.NewLine; strbuilder.Append(contents); strbuilder.Replace("{clsName}", _getClassName()); int _RowCount = dt.Rows.Count; if (dt.Rows.Count > 0) { string _FieldName = "";//字段名 string _FieldText = "";// string _prefix = "txt_"; string _Lbfix = "lb_"; string _gvFix = "gv_"; int _x = 0, _y = 0, _Tabindex = 210; string _ControlType = ""; string _lbType = "LabelControl"; System.Text.StringBuilder _gvItemCol = new StringBuilder(); for (int c = 0; c < _RowCount; c++) { _x = 20 + c % 4 * 250;//计算控件在X轴位置 if (c % 4 == 0) { _y = 20 + 32 * c / 4;//计算控件在Y轴的位置 } _Tabindex = c % 4 + c / 4 + _Tabindex; //多控件类型 这边可以根据具体的需求进行控件的扩展,目前都是文本 switch (dt.Rows[c]["DATA_TYPE"].ToString()) { case "1111": break; default: _FieldName = ToolBox.UtilityHelper.ToCamelCase(dt.Rows[c]["COLUMN_NAME"].ToString()); _FieldText = ToolBox.UtilityHelper.ToCamelCase(dt.Rows[c]["COLUMN_NAME"].ToString()); _ControlType = "TextEdit"; break; } string _labName = _Lbfix + _FieldName;//label名 string _ControlName = _prefix + _FieldName;//文本框名 string _gvName = _gvFix + _FieldName;//gv中的列名 if (_gvItemCol.Length > 0) _gvItemCol.Append(","); _gvItemCol.Append("this." + _gvName); //BQSetControlObject 实例化控件 string BQSetControlObject = ("BQSetControlObject" + line + "this." + _labName + " = new DevExpress.XtraEditors." + _lbType + "();" + line); BQSetControlObject = (BQSetControlObject + "this." + _ControlName + " = new DevExpress.XtraEditors." + _ControlType + "(); " + line); BQSetControlObject = (BQSetControlObject + "this." + _gvName + " = new DevExpress.XtraGrid.Columns.GridColumn(); " + line); strbuilder.Replace("BQSetControlObject", BQSetControlObject); //创建对象结束后 this.SuspendLayout(); //BQSetControlInfo 设置控件信息 位置 大小 名称 string _ControlName02 = "\"" + _labName + "\"";//给控件Text 赋值的是带有双引号的字符串 因此这个里要特殊处理下 string _FieldName02 = "\"" + _FieldName + "\""; string _FieldText02 = "\"" + (_FieldText + ":") + "\""; string BQSetControlInfo = "BQSetControlInfo" + line //label + "//" + line + "//" + _labName + line + "//" + line + "this." + _labName + ".Location = new System.Drawing.Point(" + _x + ", " + _y + ");" + line//位置 + "this." + _labName + ".Name = " + _ControlName02 + ";" + line//给Name赋值 + "this." + _labName + ".Size = new System.Drawing.Size(150,21);" + line//大小 + "this." + _labName + ".TabIndex = " + _Tabindex + ";" + line + "this." + _labName + ".Tag = " + _FieldName02 + ";" + line//Tag值 + "this." + _labName + ".Appearance.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line + "this." + _labName + ".Text = " + _FieldText02 + ";" + line //文本 + "//" + line + "//" + _ControlName + line + "//" + line + "this." + _ControlName + ".Location = new System.Drawing.Point(" + (_x + 60) + ", " + _y + ");" + line//位置 + "this." + _ControlName + ".Name = " + _ControlName02 + ";" + line + "this." + _ControlName + ".Size = new System.Drawing.Size(150,21);" + line + "this." + _ControlName + ".TabIndex = " + _Tabindex + ";" + line + "this." + _ControlName + ".Tag = " + _FieldName02 + ";" + line + "this." + _ControlName + ".Properties.Appearance.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line //gv + "this." + _gvName + ".AppearanceCell.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line + "this." + _gvName + ".AppearanceCell.Options.UseFont = true;" + line + "this." + _gvName + ".FieldName = " + _FieldName02 + ";" + line + "this." + _gvName + ".Caption = " + _FieldName02 + ";" + line + "this." + _gvName + ".MinWidth = 25;" + line + "this." + _gvName + ".Visible = true;" + line + "this." + _gvName + ".Width =94;" + line + "this." + _gvName + ".OptionsColumn.AllowEdit = false;" + line + "this." + _gvName + ".VisibleIndex = 0;" + line; strbuilder.Replace("BQSetControlInfo", BQSetControlInfo); //BQAddControltoMContainer//将控件添加到Form 容器中 这个容器可以是 panel 可以是groupbox 等等 string BQAddControltoMContainer = "BQAddControltoMContainer" + line + " this.panel1.Controls.Add(this." + _labName + ");" + line; BQAddControltoMContainer += " this.panel1.Controls.Add(this." + _ControlName + ");" + line; strbuilder.Replace("BQAddControltoMContainer", BQAddControltoMContainer); //BQCreateConrolObejct //创建控件 string BQCreateConrolObejct = "BQCreateConrolObejct" + line + "private DevExpress.XtraEditors." + _lbType + " " + _labName + ";" + line; BQCreateConrolObejct += "private DevExpress.XtraEditors." + _ControlType + " " + _ControlName + ";" + line; BQCreateConrolObejct += " private DevExpress.XtraGrid.Columns.GridColumn " + _gvName + ";" + line; strbuilder.Replace("BQCreateConrolObejct", BQCreateConrolObejct); } strbuilder.Replace("{colList}", _gvItemCol.ToString()); System.IO.File.Delete(txtCreateDBPath.Text + "\\" + _FileName + ".Designer.cs"); string path = txtCreateDBPath.Text; System.IO.StreamWriter sw = System.IO.File.CreateText(path + "\\" + _FileName + ".Designer.cs"); sw.Write(strbuilder.ToString()); sw.Close(); sw.Dispose(); } } /// /// 第三个文件 /// /// /// void ReadResxFile(DataTable dt, string _FileName) { string _Temppath = Application.StartupPath + _getTemple("resx"); string contents = System.IO.File.ReadAllText(_Temppath); StringBuilder strbuilder = new StringBuilder(); string line = Environment.NewLine; strbuilder.Append(contents); System.IO.File.Delete(txtCreateDBPath.Text + "\\" + _FileName + ".resx"); string path = txtCreateDBPath.Text; System.IO.StreamWriter sw = System.IO.File.CreateText(path + "\\" + _FileName + ".resx"); sw.Write(strbuilder.ToString()); sw.Close(); sw.Dispose(); } private void btnToPath_Click_1(object sender, EventArgs e) { string _GetfilePath = FileSelector.BrowseFilePathForSave(); txtCreateDBPath.Text = _GetfilePath; } } }