using DevExpress.XtraEditors;
using DevExpress.XtraSplashScreen;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraGrid.Views.Grid;
using WinformGeneralDeveloperFrame.Commons;
namespace WinformGeneralDeveloperFrame
{
public partial class frmSelectDataBase : FrmBaseForm
{
public frmSelectDataBase()
{
InitializeComponent();
}
private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
{
using (var con = new DB())
{
string name= cmbDataBaseList.Text.Split("-".ToCharArray())[0];
var data = con.sysDataBase.Where(p => p.name.Equals(name)).ToList();
if (data.Count > 0)
{
sysDataBase info = data.First();
txtConnurl.Text = info.connecturl;
}
else
{
txtConnurl.Text = "";
}
}
}
///
///初始化数据连接下拉框
///
private void init()
{
cmbDataBaseList.Properties.Items.Clear();
using (var con=new DB())
{
var data= con.sysDataBase.ToList();
foreach (var item in data)
{
cmbDataBaseList.Properties.Items.Add($"{item.name}-{item.serverip}-{item.databasename}");
}
cmbDataBaseList.SelectedIndex = 0;
var data2 = con.sysDataTableInfo.ToList();
foreach (var item in data2)
{
repositoryItemComboBox2.Items.Add(item.DataTableName);
}
cmbDataBaseList.SelectedIndex = 0;
}
}
private void frmSelectDataBase_Load(object sender, EventArgs e)
{
init();
repositoryItemComboBox1.SelectedIndexChanged += repositoryItemComboBox1SelectedIndexChanged;
}
private void repositoryItemComboBox1SelectedIndexChanged(object sender, EventArgs e)
{
var com = sender as ComboBoxEdit;
string type= com.SelectedItem.ToString();
ControlInfo info= gridView1.GetFocusedRow() as ControlInfo;
info.controlType = com.EditValue.ToString();
//info.controlName = getControlName(info.dataBaseFieldName, info.controlType);
gridView1.PostEditor();
}
///
/// 新建数据连接
///
///
///
private void btnAdd_Click(object sender, EventArgs e)
{
FrmCreateDataBaseConn frm = new FrmCreateDataBaseConn();
if (frm.ShowDialog() == DialogResult.OK)
{
init();
cmbDataBaseList.Text = $"{frm.dbEntity.name}-{frm.dbEntity.serverip}-{frm.dbEntity.databasename}";
}
}
///
/// 取消
///
///
///
private void wizardControl1_CancelClick(object sender, CancelEventArgs e)
{
this.Close();
}
///
/// 完成
///
///
///
private void wizardControl1_FinishClick(object sender, CancelEventArgs e)
{
if (string.IsNullOrWhiteSpace(textEdit1.Text))
{
"请填写命名空间".ShowWarning();
textEdit1.Focus();
return;
}
if (string.IsNullOrWhiteSpace(textEdit2.Text))
{
"请选择输出目录".ShowWarning();
textEdit2.Focus();
return;
}
SplashScreenManager.ShowForm(typeof(WaitForm1));
List list = gridControl1.DataSource as List;
EntityAdapter adp = new EntityAdapter();
WinformAdapter winform = new WinformAdapter();
DBAdapter dbAdapter = new DBAdapter();
var dic=list.GroupBy(p => p.tableName);
try
{
List tableList = new List();
foreach (var item in dic)
{
if(isEntity.Checked)
adp.create(item.Key, textEdit1.Text, textEdit2.Text, item.ToList());
if(isWinform.Checked)
winform.create(item.Key, textEdit1.Text, textEdit2.Text, item.ToList());
tableList.Add(item.Key);
}
if(isDB.Checked)
dbAdapter.create(textEdit1.Text, textEdit2.Text, tableList);
"生成成功!".ShowTips();
}
catch (Exception ex)
{
ex.StackTrace.ShowError();
}
SplashScreenManager.CloseForm();
}
///
/// 下一步
///
///
///
private void wizardControl1_NextClick(object sender, DevExpress.XtraWizard.WizardCommandButtonClickEventArgs e)
{
if (wizardControl1.SelectedPageIndex ==0)
{
cmbtablelist.Properties.Items.Clear();
using (SqlConnection con = new SqlConnection(txtConnurl.Text))
{
con.Open();
string sqlGetAllTables = "select TABLE_NAME from INFORMATION_SCHEMA.TABLES order by TABLE_NAME";
SqlCommand sqlCommand = new SqlCommand(sqlGetAllTables,con);
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read()) //如果能读到数据,一行一行地读
{
string tablename = reader["TABLE_NAME"].ToString();
cmbtablelist.Properties.Items.Add(tablename);
}
reader.Close();
}
}
if (wizardControl1.SelectedPageIndex == 1)
{
var data = cmbtablelist.Properties.Items.Where(p=>p.CheckState==CheckState.Checked).ToList();
if (data.Count > 0)
{
SplashScreenManager.ShowForm(typeof(WaitForm1));
List list = new List();
using (SqlConnection con = new SqlConnection(txtConnurl.Text))
{
con.Open();
foreach (var item in data)
{
string strsql2 = $"SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{item.Value}'";
List keysList = new List();
SqlCommand sqlCommand2 = new SqlCommand(strsql2, con);
SqlDataReader reader2 = sqlCommand2.ExecuteReader();
while (reader2.Read()) //如果能读到数据,一行一行地读
{
keysList.Add(reader2["COLUMN_NAME"].ToString());
}
reader2.Close();
string strsql3 = $"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{item.Value}' AND COLUMNPROPERTY( OBJECT_ID('{item.Value}'),COLUMN_NAME,'IsIdentity')=1";
List IdentityList = new List();
SqlCommand sqlCommand3 = new SqlCommand(strsql3, con);
SqlDataReader reader3 = sqlCommand3.ExecuteReader();
while (reader3.Read()) //如果能读到数据,一行一行地读
{
IdentityList.Add(reader3["COLUMN_NAME"].ToString());
}
reader3.Close();
string sqlGetAllTables = @"SELECT
字段名 = convert(varchar(100), a.name),
表名 = convert(varchar(50), d.name),
类型 = CONVERT(varchar(50), b.name),
库名 = 'ServerModeXpoDemo',
字段说明 = 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 = '{item.Value}'";
SqlCommand sqlCommand = new SqlCommand(sqlGetAllTables, con);
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read()) //如果能读到数据,一行一行地读
{
ControlInfo info = new ControlInfo()
{
tableName = reader["表名"].ToString(),
dataBaseFieldName = reader["字段名"].ToString(),
dataBaseFieldType = reader["类型"].ToString(),
CSharpFieldType = SqlserverDataTypeToModelDataType.ChangedType(reader["类型"].ToString()),
CSharpFieldName = reader["字段名"].ToString(),
controlName ="txt"+ reader["字段名"],
dataBaseFieldDDesr= reader["字段说明"].ToString(),
controlLabelName = string.IsNullOrEmpty(reader["字段说明"].ToString()) ? reader["字段名"].ToString() : reader["字段说明"].ToString(),
controlType = "TextEdit",
// isNull = reader["IS_NULLABLE"].ToString().ToBoolean(),
isKey = keysList.Contains(reader["字段名"].ToString()),
isIdentity = IdentityList.Contains(reader["字段名"].ToString())
};
list.Add(info);
}
reader.Close();
}
gridControl1.DataSource = list;
}
SplashScreenManager.CloseForm();
}
else
{
"请选择至少一张表!".ShowWarning();
e.Handled = true;
}
}
}
private void simpleButton1_Click(object sender, EventArgs e)
{
if (xtraFolderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textEdit2.Text = xtraFolderBrowserDialog1.SelectedPath;
}
}
private string getControlName(string controlname,string type)
{
string name = string.Empty;
switch (type)
{
case "TextEdit":
name = "txt" + controlname;
break;
case "DateEdit":
name = "txt" + controlname;
break;
case "SimpleButton":
name = "txt" + controlname;
break;
case "CheckEdit":
name = "txt" + controlname;
break;
case "MemoEdit":
name = "txt" + controlname;
break;
case "LookUpEdit":
name = "txt" + controlname;
break;
case "ComboBoxEdit":
name = "txt" + controlname;
break;
case "PictureEdit":
name = "txt" + controlname;
break;
case "TreeListLookUpEdit":
name = "txt" + controlname;
break;
}
return name;
}
}
}