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();
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;
}
///
/// 模版路径
///
/// 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:
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();
}
}
///
/// 第三个文件
///
///
///
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();
}
}
}