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();
|
}
|
/// <summary>
|
/// 读取数据库表
|
/// </summary>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 选择生成路径
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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;
|
}
|
/// <summary>
|
/// 读取列名
|
/// </summary>
|
/// <returns></returns>
|
private DataTable _getCol()
|
{
|
string strConn = txt_sqlconn.Text.Trim();
|
System.Text.StringBuilder sb = new StringBuilder();
|
sb.Append("SELECT COLUMN_NAME = a.name, DATA_TYPE = b.name, REMARK = isnull(g.[value],a.name) ");
|
sb.Append(" FROM syscolumns a left join systypes b on a.xusertype = b.xusertype inner join sysobjects d on a.id = d.id and d.xtype = 'U' and d.name<>'dtproperties' ");
|
sb.Append(" left join syscomments e on a.cdefault = e.id ");
|
sb.Append(" left join sys.extended_properties g on a.id = G.major_id and a.colid = g.minor_id ");
|
sb.Append(" left join sys.extended_properties f on d.id = f.major_id and f.minor_id = 0 ");
|
sb.Append(" where d.name = '" + txt_table.SelectedValue.ToString() + "'");
|
sb.Append(" order by a.id, a.colorder");
|
DataSet dset = new DataSet();
|
using (SqlConnection connection = new SqlConnection(strConn))
|
{
|
connection.Open();
|
SqlCommand cmd = new SqlCommand();
|
cmd.Connection = connection;
|
cmd.CommandText = sb.ToString();
|
using (SqlDataAdapter dt = new SqlDataAdapter(cmd))
|
{
|
dt.Fill(dset, "0");
|
}
|
}
|
if (dset != null && dset.Tables.Count > 0)
|
{
|
return dset.Tables[0];
|
}
|
return null;
|
}
|
/// <summary>
|
/// 模版路径
|
/// </summary>
|
/// <param name="fileType">cs,Designer.cs</param>
|
/// <returns></returns>
|
private string _getTemple(string fileType)
|
{
|
return (@"\templeEasyCode\category1\category1." + fileType);
|
}
|
/// <summary>
|
/// 读取类名
|
/// </summary>
|
/// <returns></returns>
|
private string _getClassName()
|
{
|
return "Frm" + txt_table.SelectedValue.ToString();
|
}
|
/// <summary>
|
/// 第一个文件
|
/// </summary>
|
/// <param name="dt"></param>
|
/// <param name="_FileName"></param>
|
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();
|
}
|
/// <summary>
|
/// 第二个文件
|
/// </summary>
|
/// <param name="dt"></param>
|
/// <param name="_FileName"></param>
|
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:
|
string _tf = ToolBox.UtilityHelper.ToCamelCase(dt.Rows[c]["COLUMN_NAME"].ToString());
|
_FieldName = _tf;
|
_FieldText = dt.Rows[c]["REMARK"].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 = " + _FieldText02 .Replace(":","")+ ";" + 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();
|
}
|
}
|
/// <summary>
|
/// 第三个文件
|
/// </summary>
|
/// <param name="dt"></param>
|
/// <param name="_FileName"></param>
|
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;
|
}
|
|
private void button1_Click(object sender, EventArgs e)
|
{
|
EasyRpt frm = new EasyRpt("001");
|
frm.Show();
|
}
|
}
|
}
|