WinFormTools/WinformDevFramework/Pages/System/FrmCreateCode.cs

280 lines
12 KiB
C#

using Autofac;
using SqlSugar;
using Sunny.UI;
using WinformDevFramework.IServices.System;
namespace WinformDevFramework
{
public partial class FrmCreateCode : Form
{
private ISysDataSourceServices _dataSourceServices;
public FrmCreateCode(ISysDataSourceServices sysDataSourceServices)
{
_dataSourceServices = sysDataSourceServices;
InitializeComponent();
}
private void FrmCreateCode_Load(object sender, EventArgs e)
{
//初始化数据库 下拉框
comboBox1.DataSource = _dataSourceServices.Query();
comboBox1.DisplayMember = "ConnectName";
comboBox1.ValueMember = "ID";
this.uiComboTreeViewTable.CheckBoxes = true;
this.uiComboTreeViewTable.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
uiComboTreeViewTable.ShowClearButton = true;
uiComboTreeViewTable.ShowSelectedAllCheckBox = true;
uiComboTreeViewTable.TextChanged += UiComboTreeViewTable_TextChanged;
dataGridViewTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
this.controlType.DataSource = new string[] { "TextBox", "NumericUpDown", "CheckBox", "DateTimePicker", };
dataGridViewTable.SelectionChanged += dataGridViewTable_SelectionChanged;
dataGridViewTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewTable.MultiSelect = false;
}
private void dataGridViewTable_SelectionChanged(object? sender, EventArgs e)
{
DataGridView d = (DataGridView)sender;
if (d.SelectedRows.Count > 0)
{
var selectedRow = d.SelectedRows[0];
var selectedCell = selectedRow.Cells[0];
if (selectedRow.Index > -1 && !string.IsNullOrEmpty(selectedCell.Value.ToString()))
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (!((ControlInfo)row.DataBoundItem).tableName.Equals(selectedCell.Value.ToString()))
{
CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource];
cm.SuspendBinding();
row.Visible = false;
cm.ResumeBinding();
}
else
{
row.Visible = true;
}
}
}
}
}
private void UiComboTreeViewTable_TextChanged(object? sender, EventArgs e)
{
var tables = uiComboTreeViewTable.Text.Split(";").ToList();
if (tables.Any())
{
List<ControlInfo> list = new List<ControlInfo>();
ISqlSugarClient dbClient = AppInfo.Container.Resolve<ISqlSugarClient>();
foreach (var item in tables)
{
string str = item.TrimStart().TrimEnd();
string sqlGetAllTables = @"SELECT
dataBaseFieldName = convert(varchar(100), a.name),
tableName = convert(varchar(50), d.name),
dataBaseFieldType = CONVERT(varchar(50), b.name),
dataBaseFieldDDesr = convert(varchar(50), isnull(g.[value], ''))
FROM dbo.syscolumns a
left join dbo.systypes b on a.xusertype = b.xusertype
inner join dbo.sysobjects d on a.id = d.id and d.xtype = 'U' and d.name <> 'dtproperties'
left join dbo.syscomments e on a.cdefault = e.id
left join sys.extended_properties g on a.id = g.major_id and a.colid = g.minor_id
left join sys.extended_properties f on d.id = f.major_id and f.minor_id = 0 " + $"where d.name = '{str}'";
//string strsql2 = $"SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{item}'";
//List<string> keysList = new List<string>();
//keysList.AddRange(dbClient.Ado.SqlQuery<string>(strsql2));
var data = dbClient.Ado.SqlQuery<ControlInfo>(sqlGetAllTables);
string strsql3 = $"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{str}' AND COLUMNPROPERTY( OBJECT_ID('{str}'),COLUMN_NAME,'IsIdentity')=1";
List<string> IdentityList = new List<string>();
IdentityList.AddRange(dbClient.Ado.SqlQuery<string>(strsql3));
data.ForEach(p =>
{
p.controlName = p.dataBaseFieldName;
p.controlType = GetControlType(p.dataBaseFieldType);
p.isIdentity = IdentityList.Contains(p.dataBaseFieldName);
p.labelName = "lbl" + p.dataBaseFieldName;
p.labelText = p.dataBaseFieldDDesr;
});
list.AddRange(data);
}
dataGridView1.DataSource = list;
dataGridViewTable.DataSource = list.Distinct(p => p.tableName).ToList();
foreach (DataGridViewColumn column in dataGridViewTable.Columns)
{
if (!column.Name.Equals("tableName"))
{
column.Visible = false;
}
}
dataGridView1.Columns["tableName"].Visible = false;
dataGridView1.Columns["dataBaseFieldDDesr"].Visible = false;
}
}
private string GetControlType(string dataType)
{
string type = "TextBox";
switch (dataType)
{
case "int":
type = "NumericUpDown"; break;
case "decimal":
type = "NumericUpDown"; break;
case "bit":
type = "CheckBox"; break;
case "datetime":
type = "DateTimePicker"; break;
}
return type;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int id = comboBox1.SelectedValue.ToInt32();
sysDataSource dataSource = _dataSourceServices.QueryById(id);
if (dataSource is not null)
{
var connectionString =
$"Server={dataSource.Host};Database={dataSource.DataBaseName};User Id = {dataSource.Username}; Password={dataSource.Password}";
textBox1.Text = connectionString;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(comboBox1.Text))
{
MessageBox.Show("请选择数据库!");
return;
}
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = textBox1.Text
,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
try
{
db.Open();
string sqlGetAllTables = "select TABLE_NAME from INFORMATION_SCHEMA.TABLES order by TABLE_NAME";
var tables = db.Ado.SqlQuery<string>(sqlGetAllTables);
uiComboTreeViewTable.TreeView.Nodes.Clear();
foreach (var table in tables)
{
uiComboTreeViewTable.Nodes.Add(table);
}
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
private void btnOk_Click(object sender, EventArgs e)
{
if (ValidateData())
{
var tables = uiComboTreeViewTable.Text.Split(';');
List<string> ts = new List<string>();
foreach (var table in tables)
{
var t = table.TrimEnd().TrimStart();
if (!string.IsNullOrEmpty(t))
ts.Add(t);
}
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = textBox1.Text
,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
try
{
//生成实体类
db.DbFirst.IsCreateAttribute().Where(p => ts.Contains(p)).CreateClassFile($"{txtUrl.Text}\\Entity", txtNameSpace.Text);
var isc = new IServicesCreate();
var sc = new ServicesCreate();
var irc = new IRepositoryCreate();
var rc = new RepositoryCreate();
var wc = new WinformCreate();
var data = dataGridView1.DataSource as List<ControlInfo>;
//生成Iservices Services IRepository Repository
ts.ForEach(p =>
{
isc.Create(p, txtNameSpace.Text, txtUrl.Text);
sc.Create(p, txtNameSpace.Text, txtUrl.Text);
irc.Create(p, txtNameSpace.Text, txtUrl.Text);
rc.Create(p, txtNameSpace.Text, txtUrl.Text);
wc.Create(p, txtNameSpace.Text, txtUrl.Text, data.Where(x => x.tableName.Equals(p)).ToList());
});
MessageBox.Show("生成成功");
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
}
private void button4_Click(object sender, EventArgs e)
{
TabControl parentTabControl = this.Parent.Parent as TabControl;
TabPage tabpage = this.Parent as TabPage;
parentTabControl.TabPages.Remove(tabpage);
}
private void button2_Click(object sender, EventArgs e)
{
using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
{
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
string selectedPath = folderBrowserDialog.SelectedPath;
// 在这里可以使用选择的路径进行后续操作
txtUrl.Text = selectedPath;
}
}
}
private bool ValidateData()
{
if (string.IsNullOrEmpty(comboBox1.Text))
{
MessageBox.Show("请选择数据库");
return false;
}
if (string.IsNullOrEmpty(uiComboTreeViewTable.Text))
{
MessageBox.Show("请选择数据表");
return false;
}
if (string.IsNullOrEmpty(txtNameSpace.Text))
{
MessageBox.Show("命名空间不能为空");
return false;
}
if (string.IsNullOrEmpty(txtUrl.Text))
{
MessageBox.Show("请选择文件生成目录");
return false;
}
return true;
}
}
}