编程与数学 03-008 《看潮企业管理软件》项目开发 08 数据字典 3-1
本文档详细介绍了《看潮企业管理软件》数据字典模块的设计与实现。系统采用C# WinForms框架结合DevExpress XtraGrid控件开发可视化设计器,通过PostgreSQL存储过程实现元数据管理。主要功能包括:字段属性配置、版本继承机制、动态编辑器分配,以及自动生成C#实体类、DTO和数据库建表脚本。该模块有效解决了企业信息系统中数据一致性、开发效率等核心问题,为ERP系统提供了标准化
编程与数学 03-008 《看潮企业管理软件》项目开发 08 数据字典 3-1
摘要:本文档详细介绍了《看潮企业管理软件》中数据字典功能的设计与实现。基于C# WinForms与DevExpress XtraGrid控件构建的设计器,配合PostgreSQL存储过程实现数据字典的自动化管理。系统支持字段属性的可视化配置、智能版本继承、动态编辑器分配,并能自动生成C#实体类、DTO及PostgreSQL建表语句。通过元数据标准化管理,有效解决了企业信息系统中的数据一致性、开发效率、界面标准化及系统维护等核心问题,为ERP系统的长期稳定演进提供了基础设施保障。
关键词:数据字典、元数据管理、ERP系统、XtraGrid、DevExpress、PostgreSQL、代码生成、数据一致性、动态编辑器、版本继承
人工智能助手:DeepSeek、Kimi
通过实际的功能设计来了解数据字典及其处理。
一、设计器代码
using DevExpress.Utils;
using DevExpress.Utils.Menu;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Data;
using System.Windows.Forms;
using static KcErp.KcEditgd;
using static KcErp.KcMain;
namespace KcErp
{
public partial class FmSjzd : DevExpress.XtraEditors.XtraForm
{
#region "fields"
public DataTable dtgnlb;
public int flds1 = 9;
public string gnmc;
public int keys1 = 3;
public string name1 = "x9_sjzd";
public Form ofm;
public string prfm = "";
public string ttbmc = "";
public short ttxz = 0;
public string tzdbb = "1501";
public string tzdlb = "";
private string[] colcaption = new string[21];
private DataTable dtzd = new DataTable();
private GridView gdgv = new GridView();
private RepositoryItemComboBox ricombo1 = new RepositoryItemComboBox();
//文本
private RepositoryItemComboBox ricombo2 = new RepositoryItemComboBox();
//整型
private RepositoryItemComboBox ricombo3 = new RepositoryItemComboBox();
//实数
private RepositoryItemComboBox ricombo4 = new RepositoryItemComboBox();
//日期
private RepositoryItemComboBox ricombo5 = new RepositoryItemComboBox();
private RepositoryItemComboBox ricombof = new RepositoryItemComboBox();
//逻辑
private RepositoryItemComboBox ricombom = new RepositoryItemComboBox();
//masktype
//formattype
private RepositoryItemComboBox ricombos = new RepositoryItemComboBox();
//数据字典
private bool sftj;
private bool sfzr;
private string sqltj;
#endregion
public FmSjzd()
{
InitializeComponent();
this.Load += Form_load;
this.FormClosing += Form_formclosing;
this.Disposed += Form_disposed;
this.Deactivate += Form_deactivate;
BarZR.ItemClick += Barbuttonitem3_itemclick;
BarTJ.ItemClick += Barbuttonitem4_itemclick;
BarHELP.ItemClick += Barhelp_itemclick;
BarEXIT.ItemClick += Barexit_itemclick;
BarDY.ItemClick += Bardy_itemclick;
BarF2.ItemClick += Barf2_itemclick;
BarDEL.ItemClick += Bardel_itemclick;
CBE2.SelectedIndexChanged += Cbe2_selectedindexchanged;
ButtonRF.Click += Buttonrf_click;
ButtonCZ.Click += Buttoncz_click;
ButtonWB.Click += Buttonwb_click;
ButtonpPG.Click += Buttonppg_click;
}
private static string Dxkt(string str)
{
if (str.Length > 1)
{
return str.Substring(0, 1).ToUpper() + str.Substring(1).ToLower();
}
else
{
return str.ToUpper();
}
}
private void Barbuttonitem3_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Dtzr("0");
}
private void Barbuttonitem4_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Dttj();
}
private void Bardel_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (gdgv.RowCount <= 0)
{
return;
}
if (gdgv.FocusedColumn.ReadOnly || (!gdgv.FocusedColumn.OptionsColumn.AllowEdit))
{
return;
}
try
{
int colxh = gdgv.FocusedColumn.VisibleIndex;
if ((colxh < 13))
{
return;
}
string tpname = gdgv.FocusedColumn.ColumnType.Name;
if (tpname.ToLower() != "string")
{
return;
}
if (MsgSfShow("确定要清空此列,本操作只限字符串列!") != DialogResult.OK)
{
return;
}
for (int r = 0; r < gdgv.RowCount; r++)
{
gdgv.SetRowCellValue(r, gdgv.FocusedColumn, "");
}
}
catch (Exception ex)
{
MsgExShow("整列清空", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Bardy_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
try
{
gdgv.OptionsPrint.AllowCancelPrintExport = true;
gdgv.OptionsPrint.PrintHeader = true;
gdgv.OptionsPrint.RtfPageHeader = CBE2.Text;
gdgv.ShowRibbonPrintPreview();
}
catch (Exception ex)
{
MsgExShow("打印数据字典", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Barexit_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
SaveFmSet();
this.Close();
}
private void Barf2_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
try
{
if (gdgv.RowCount <= 0)
{
return;
}
if (gdgv.FocusedColumn.ReadOnly || (!gdgv.FocusedColumn.OptionsColumn.AllowEdit))
{
return;
}
int colxh = gdgv.FocusedColumn.VisibleIndex;
if ((colxh < 13))
{
return;
}
string clname = gdgv.FocusedColumn.Caption;
string tpname = gdgv.FocusedColumn.ColumnType.Name;
string clvalue = gdgv.GetRowCellValue(gdgv.FocusedRowHandle, gdgv.FocusedColumn).ToString();
string ipv = "";
ipv = XtraInputBox.Show("请输入列 " + clname + " 的值,该值将被赋于所有行,请谨慎操作", "整列赋值", clvalue);
if (string.IsNullOrEmpty(ipv))
{
return;
}
for (int r = 0; r < gdgv.RowCount; r++)
{
switch (tpname)
{
case "boolean":
gdgv.SetRowCellValue(r, gdgv.FocusedColumn, ipv == "true" ? 1 : 0);
break;
case "decimal":
gdgv.SetRowCellValue(r, gdgv.FocusedColumn, Convert.ToDecimal(ipv));
break;
case "int32":
gdgv.SetRowCellValue(r, gdgv.FocusedColumn, Convert.ToInt32(ipv));
break;
default: //string
gdgv.SetRowCellValue(r, gdgv.FocusedColumn, ipv);
break;
}
}
}
catch (Exception ex)
{
MsgExShow("整列赋值", ex.Message, ex.Source, ex.StackTrace);
return;
}
}
private void Barhelp_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
RunHelpsj(this, "数据字典");
}
private void Buttoncz_click(object sender, EventArgs e)
{
Dtzr("2");
}
private void Buttondto_click(object sender, EventArgs e)
{
Makemodel("dto");
}
private void Buttonmd_click(object sender, EventArgs e)
{
Makemodel("");
}
private void Buttonppg_click(object sender, EventArgs e)
{
Makepg();
}
private void Buttonrf_click(object sender, EventArgs e)
{
Dtzr("1");
}
private void Buttonwb_click(object sender, EventArgs e)
{
Maketext();
}
private void Cbe2_selectedindexchanged(object sender, EventArgs e)
{
if (sfzr && !sftj)
{
Dttj();
}
Dtzr("0");
}
private void Dttj()
{
CBE2.Focus();
gdgv.PostEditor();
try
{
KcDb.DBopen();
DataTable dt1c = new DataTable();
string xxstr = "";
int xxrecord = 0;
dt1c = dtzd.GetChanges();
if (dt1c != null)
{
xxrecord = dt1c.Rows.Count;
if (KcDb.GetDtSaven(name1, dt1c))
{
dtzd.AcceptChanges();
if (xxrecord > 0)
{
xxstr += Lzdzl.Text + "被提交" + xxrecord.ToString().Trim() + "行";
}
}
}
BarTJ.Enabled = false;
if (!string.IsNullOrEmpty(xxstr.Trim()))
{
MsgXxShow("数据提交已经完成" + Environment.NewLine + Environment.NewLine + xxstr);
}
sftj = true;
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("提交数据", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Dtzr(string gx)
{
tzdbb = dtgnlb.DefaultView[CBE2.SelectedIndex]["tzdbb"].ToString();
ttbmc = dtgnlb.DefaultView[CBE2.SelectedIndex]["tname"].ToString();
if (string.IsNullOrEmpty(ttbmc.Trim()))
{
return;
}
try
{
Loadric();
TextBB.Text = tzdbb;
string zdexists = "select case when exists(select tname from x9_sjzd where tname='" + ttbmc +
"' and zdbb='" + tzdbb + "') then 'have' else 'none' end as zdcz;";
string exejg = KcDb.DBString(zdexists);
if (exejg == "none")
{
gx = "1";
}
string exsql1 = "call x9_zrsjzd('" + tzdbb + "','" + ttbmc + "'," + gx + ")";
KcDb.DBexec(exsql1);
string fd = "id,fxh,fname,ftype,flen,fscale,fmemo,fzmc,srlx,byxm,hsxm,alignment,edit," +
"formattype,formatstr,masktype,maskstr,sumtype,sumfmt,search,tooltip";
string sqlzd = string.Format("select " + fd + " from x9_sjzd where zdbb='{0}' and tname='{1}' order by fxh", tzdbb, ttbmc);
dtzd = KcDb.DtRead(sqlzd);
if (dtzd != null)
{
if (dtzd.Rows.Count > 0)
{
GridZD.DataSource = dtzd;
}
}
gdgv.RefreshData();
gdgv.Focus();
L1.Caption = tzdbb + " 数据表名:" + ttbmc + " 共" + dtzd.Rows.Count.ToString().Trim() + "行记录 ";
sfzr = true;
sftj = true;
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("载入数据", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Dxmenuclick(object sender, EventArgs e)
{
Gvoptionwith(ref gdgv, GridZD.Width);
}
private void Form_deactivate(object sender, EventArgs e)
{
ofm.Activate();
}
private void Form_disposed(object sender, EventArgs e)
{
try
{
ofm = null; //form
gnmc = null; //string '所有窗口加此属性,以便不会重复打开
dtgnlb = null; //datatable '功能及数据表列表
name1 = null; //string = "x9_sjzd" '数据表名
keys1 = 0; //integer = 3 '主键字段数
flds1 = 0; //integer = 9 '更新字段数
tzdbb = null; //string = "1501"
ttbmc = null; //string = ""
ttxz = 0; //int16 = 0
sqltj = null; //string '载入条件
dtzd = null; //new datatable '数据字典
sftj = false; //boolean
sfzr = false; //boolean
ricombo1 = null; //new repositoryitemcombobox '文本
ricombo2 = null; //new repositoryitemcombobox '整型
ricombo3 = null; //new repositoryitemcombobox '实数
ricombo4 = null; //new repositoryitemcombobox '日期
ricombo5 = null; //new repositoryitemcombobox '逻辑
ricombom = null; //new repositoryitemcombobox 'masktype
ricombof = null; //new repositoryitemcombobox 'formattype
ricombos = null; //new repositoryitemcombobox 'sumtype
gdgv = null; //new gridview
colcaption = null; //string
RibbonControl = null; //devexpress.xtrabars.ribbon.ribboncontrol
RibbonPage1 = null; //devexpress.xtrabars.ribbon.ribbonpage
RibbonPageGroup1 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
RibbonStatusBar = null; //devexpress.xtrabars.ribbon.ribbonstatusbar
BarZR = null; //devexpress.xtrabars.barbuttonitem
BarTJ = null; //devexpress.xtrabars.barbuttonitem
Sp1 = null; //devexpress.xtraeditors.splitcontainercontrol
GridZD = null; //devexpress.xtragrid.gridcontrol
GridView1 = null; //devexpress.xtragrid.views.grid.gridview
LabelControl2 = null; //devexpress.xtraeditors.labelcontrol
CBE2 = null; //devexpress.xtraeditors.comboboxedit
L1 = null; //devexpress.xtrabars.barstaticitem
BarCheckItem1 = null; //devexpress.xtrabars.barcheckitem
BarCheckItem2 = null; //devexpress.xtrabars.barcheckitem
BarCheckItem3 = null; //devexpress.xtrabars.barcheckitem
RepositoryItemRadioGroup1 = null; //devexpress.xtraeditors.repository.repositoryitemradiogroup
V1 = null; //devexpress.xtrabars.barcheckitem
V2 = null; //devexpress.xtrabars.barcheckitem
V3 = null; //devexpress.xtrabars.barcheckitem
BarButtonItem5 = null; //devexpress.xtrabars.barbuttonitem
BarButtonItem6 = null; //devexpress.xtrabars.barbuttonitem
BarButtonItem7 = null; //devexpress.xtrabars.barbuttonitem
RibbonPageGroup3 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
CardView1 = null; //devexpress.xtragrid.views.card.cardview
BackgroundWorker1 = null; //system.componentmodel.backgroundworker
BarHELP = null; //devexpress.xtrabars.barbuttonitem
BarEXIT = null; //devexpress.xtrabars.barbuttonitem
ButtonRF = null; //devexpress.xtraeditors.simplebutton
TextBB = null; //devexpress.xtraeditors.textedit
Lgnmc = null; //devexpress.xtraeditors.labelcontrol
Lzdzl = null; //devexpress.xtraeditors.labelcontrol
GC.Collect();
}
catch (Exception ex)
{
MsgExShow("卸载窗口对象", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Form_formclosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
Dttj();
}
private void Form_load(object sender, System.EventArgs e)
{
string testxh = DateTime.Now.ToString("yyyyMMdd HHmmss ffff");
try
{
SetDg(this, 1800, 600, true);
if (pCdimage.Images.Count > 0)
{
foreach (BarItem item in RibbonControl.Items)
{
if (item.GetType().Name.ToLower() == "barbuttonitem")
{
if (pCdimage.Images.IndexOf(item.Caption) >= 0)
{
((BarButtonItem)item).LargeGlyph = pCdimage.Images[item.Caption];
}
}
}
}
L1.Caption = "";
colcaption[0] = "id";
colcaption[1] = "序号";
colcaption[2] = "字段名称";
colcaption[3] = "类型";
colcaption[4] = "长度";
colcaption[5] = "小数";
colcaption[6] = "标题";
colcaption[7] = "分组";
colcaption[8] = "输入类型";
colcaption[9] = "必要";
colcaption[10] = "行首";
colcaption[11] = "对齐";
colcaption[12] = "控件";
colcaption[13] = "格式类型";
colcaption[14] = "格式字符";
colcaption[15] = "掩码类型";
colcaption[16] = "掩码字符";
colcaption[17] = "摘要类型";
colcaption[18] = "摘要格式";
colcaption[19] = "上网搜索";
colcaption[20] = "操作提示";
Loadgv();
CBE2.Properties.Items.Clear();
for (int i = 0; i < dtgnlb.Rows.Count; i++)
{
CBE2.Properties.Items.Add(dtgnlb.Rows[i]["tname"].ToString() +
(string.IsNullOrEmpty(dtgnlb.Rows[i]["tzdbb"].ToString()) ? "" :
"[" + dtgnlb.Rows[i]["tzdbb"] + "]"));
}
BarTJ.Enabled = false;
if (CBE2.Properties.Items.Count > 0)
{
if (ttxz == 1)
{
CBE2.SelectedIndex = 1;
}
else
{
CBE2.SelectedIndex = 0;
}
}
}
catch (Exception ex)
{
MsgExShow("加载程序", ex.Message, ex.Source, ex.StackTrace);
}
try
{
string fmset = FmRead(this.Text);
string[] fmay = fmset.Split(',');
if (fmay.Length == 6)
{
if (Convert.ToInt32(fmay[0]) > 0) this.Top = Convert.ToInt32(fmay[0]);
if (Convert.ToInt32(fmay[1]) > 0) this.Left = Convert.ToInt32(fmay[1]);
if (Convert.ToInt32(fmay[2]) > 50) this.Width = Convert.ToInt32(fmay[2]);
if (Convert.ToInt32(fmay[3]) > 50) this.Height = Convert.ToInt32(fmay[3]);
if (Convert.ToInt32(fmay[4]) > 50) Sp1.SplitterPosition = Convert.ToInt32(fmay[4]);
if (Convert.ToInt32(fmay[5]) > 16)
{
gdgv.RowHeight = Convert.ToInt32(fmay[5]);
}
}
if (gdgv != null)
{
fmset = FmRead(this.Text + "表格");
fmay = fmset.Split(',');
if (fmay.Length >= gdgv.Columns.Count)
{
for (int c = 0; c < gdgv.Columns.Count; c++)
{
int cw = Convert.ToInt32(fmay[c]);
if (cw <= 0)
{
gdgv.Columns[c].Visible = false;
}
else
{
gdgv.Columns[c].Width = cw;
}
}
}
else
{
Gvoptionwith(ref gdgv, GridZD.Width);
}
}
}
catch (Exception ex)
{
MsgExShow("应用保存的窗口参数", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Gdgv_customrowcelledit(object sender, CustomRowCellEditEventArgs e)
{
try
{
if (gdgv.Columns.Count <= 0) return;
if (e.RowHandle < 0) return;
if (e.Column.FieldName == "edit")
{
string fn = gdgv.GetRowCellValue(e.RowHandle, "srlx").ToString();
e.RepositoryItem = Rc(fn);
}
if (e.Column.FieldName == "masktype")
{
string fn = gdgv.GetRowCellValue(e.RowHandle, "srlx").ToString();
e.RepositoryItem = Rm(fn);
}
if (e.Column.FieldName == "formattype")
{
string fn = gdgv.GetRowCellValue(e.RowHandle, "srlx").ToString();
e.RepositoryItem = Rf(fn);
}
if (e.Column.FieldName == "sumtype")
{
string fn = gdgv.GetRowCellValue(e.RowHandle, "srlx").ToString();
e.RepositoryItem = Rs(fn);
}
}
catch (Exception) { }
}
private void Gvft()
{
Setgv(ref gdgv, true);
gdgv.Columns[0].Visible = false;
for (int i = 0; i < gdgv.Columns.Count; i++)
{
gdgv.Columns[i].Caption = colcaption[i];
gdgv.Columns[i].OptionsColumn.ReadOnly = (i < 6);
gdgv.Columns[i].Fixed = (i < 6) ? FixedStyle.Left : FixedStyle.None;
gdgv.Columns[i].AppearanceHeader.Options.UseTextOptions = true;
gdgv.Columns[i].AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
gdgv.Columns[i].AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
gdgv.Columns[i].AppearanceCell.Options.UseTextOptions = true;
gdgv.Columns[i].AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
switch (i)
{
case 2:
case 3:
case 6:
case 8:
case 7:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
gdgv.Columns[i].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
break;
default:
gdgv.Columns[i].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
break;
}
}
gdgv.CustomRowCellEdit += Gdgv_customrowcelledit;
gdgv.KeyUp += View_keyup;
gdgv.CellValueChanged += View_cellvaluechanged;
}
private void Loadgv()
{
try
{
string fd = "id,fxh,fname,ftype,flen,fscale,fmemo,fzmc,srlx,byxm,hsxm,alignment,edit,formattype,formatstr," +
"masktype,maskstr,sumtype,sumfmt,search,tooltip";
string sqlzd = string.Format("select " + fd + " from x9_sjzd where 1=0 AND zdbb='{0}' and tname='{1}' order by fxh", "", "");
dtzd = KcDb.DtRead(sqlzd);
if (dtzd != null)
{
GridZD.ViewCollection.Clear();
gdgv.OptionsBehavior.AutoPopulateColumns = false;
GridZD.DataSource = dtzd;
gdgv = new GridView(GridZD);
gdgv.OptionsSelection.MultiSelect = true;
gdgv.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;
gdgv.OptionsView.EnableAppearanceEvenRow = true;
gdgv.OptionsView.EnableAppearanceOddRow = true;
GridZD.MainView = gdgv;
gdgv.PopulateColumns();
gdgv.PopupMenuShowing += Mtgv_popupmenushowing;
Gvft();
}
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("初始表格视图", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Loadric()
{
if (tzdbb == "kcrj")
{
//设计器
ricombo1.Items.Clear();
ricombo1.Items.Add("field");
ricombo1.Items.Add("fieldlist");
ricombo1.Items.Add("fieldlistex");
ricombo1.Items.Add("textedit");
ricombo1.Items.Add("texteditex");
ricombo1.Items.Add("memoedit");
ricombo2.Items.Clear();
ricombo2.Items.Add("textedit");
ricombo3.Items.Clear();
ricombo3.Items.Add("textedit");
ricombo4.Items.Clear();
ricombo4.Items.Add("textedit");
ricombo4.Items.Add("dateedit");
ricombo5.Items.Clear();
ricombo5.Items.Add("checkedit");
}
else
{
//用户功能
ricombo1.Items.Clear();
ricombo1.Items.Add("textedit");
ricombo1.Items.Add("textread");
ricombo1.Items.Add("notenter");
ricombo1.Items.Add("comboedit");
ricombo1.Items.Add("listedit");
ricombo1.Items.Add("buttonedit");
ricombo1.Items.Add("buttonggxh");
ricombo1.Items.Add("buttontextedit");
ricombo1.Items.Add("buttontextread");
ricombo1.Items.Add("checkedcomboedit");
ricombo1.Items.Add("checkedlistedit");
ricombo1.Items.Add("autonumber");
ricombo1.Items.Add("memoedit");
ricombo1.Items.Add("memoread");
ricombo1.Items.Add("hyperlinkedit");
ricombo1.Items.Add("fileedit");
ricombo1.Items.Add("fileread");
ricombo1.Items.Add("richtextedit");
ricombo1.Items.Add("richtextread");
ricombo2.Items.Clear();
ricombo2.Items.Add("textedit");
ricombo2.Items.Add("textread");
ricombo2.Items.Add("notenter");
ricombo2.Items.Add("autonumber");
ricombo2.Items.Add("buttonedit");
ricombo2.Items.Add("calcedit");
ricombo2.Items.Add("coloredit");
ricombo2.Items.Add("spinedit");
ricombo3.Items.Clear();
ricombo3.Items.Add("textedit");
ricombo3.Items.Add("textread");
ricombo3.Items.Add("notenter");
ricombo3.Items.Add("calcedit");
ricombo3.Items.Add("spinedit");
ricombo4.Items.Clear();
ricombo4.Items.Add("dateedit");
ricombo4.Items.Add("textedit");
ricombo4.Items.Add("textread");
ricombo4.Items.Add("notenter");
ricombo5.Items.Clear();
ricombo5.Items.Add("checkedit");
ricombo5.Items.Add("checkread");
}
ricombom.Items.Clear();
ricombom.Items.Add("");
ricombom.Items.Add("numeric");
ricombom.Items.Add("datetime");
ricombom.Items.Add("simple");
ricombom.Items.Add("regular");
ricombom.Items.Add("regex");
ricombom.Items.Add("custom");
ricombof.Items.Clear();
ricombof.Items.Add("");
ricombof.Items.Add("datetime");
ricombof.Items.Add("numeric");
ricombof.Items.Add("custom");
ricombos.Items.Clear();
ricombos.Items.Add("");
ricombos.Items.Add("sum");
ricombos.Items.Add("average");
ricombos.Items.Add("count");
ricombos.Items.Add("max");
ricombos.Items.Add("min");
ricombo1.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombo2.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombo3.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombo4.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombo5.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombom.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombof.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombos.TextEditStyle = TextEditStyles.DisableTextEditor;
ricombo1.DropDownRows = 15;
ricombo2.DropDownRows = 15;
ricombo3.DropDownRows = 15;
ricombo4.DropDownRows = 15;
ricombo5.DropDownRows = 15;
ricombom.DropDownRows = 15;
ricombof.DropDownRows = 15;
ricombos.DropDownRows = 10;
GridZD.RepositoryItems.Clear();
GridZD.RepositoryItems.Add(ricombo1);
GridZD.RepositoryItems.Add(ricombo2);
GridZD.RepositoryItems.Add(ricombo3);
GridZD.RepositoryItems.Add(ricombo4);
GridZD.RepositoryItems.Add(ricombo5);
GridZD.RepositoryItems.Add(ricombom);
GridZD.RepositoryItems.Add(ricombof);
GridZD.RepositoryItems.Add(ricombos);
}
private void Makemodel(string str)
{
string mdstr = "";
string tbname = ttbmc.Replace("_", "").ToLower();
tbname = Dxkt(tbname);
mdstr += " //看潮企业管理软件 生成代码 岳国军 " + Environment.NewLine;
mdstr += " // " + Environment.NewLine;
if (str == "")
{
mdstr += " [table(\"" + ttbmc + "\")]" + Environment.NewLine;
}
mdstr += " public class " + tbname + str + Environment.NewLine;
mdstr += " {" + Environment.NewLine;
if (str == "")
{
mdstr += " [key]" + Environment.NewLine;
}
for (int i = 0; i < dtzd.Rows.Count; i++)
{
DataRow row = dtzd.Rows[i];
if (str == "dto" && !string.IsNullOrEmpty(tzdlb))
{
if (tzdlb.IndexOf(row["fname"].ToString()) <= 1)
{
continue;
}
}
string ftype = row["ftype"].ToString().ToLower();
string flen = row["flen"].ToString().Trim();
string colname = row["fname"].ToString().ToLower();
string coltype = ""; //注释类型
string typestr = "";
switch (ftype)
{
case "bit":
typestr = "bool";
coltype = "typename = \"bit\"";
break;
case "smallint":
typestr = "sbyte";
coltype = "typename = \"smallint\"";
break;
case "bigint":
case "int":
case "tinyint":
typestr = "int";
coltype = "typename = \"int\"";
break;
case "numeric":
case "decimal":
case "money":
case "smallmoney":
case "float":
case "real":
typestr = "double";
coltype = "typename = \"decimal(16,2)\"";
break;
case "date":
case "datetime":
case "datetime2":
typestr = "DateTime";
coltype = "typename = \"datetime\")";
break;
case "char":
case "varchar":
case "text":
typestr = "string";
coltype = "typename = \"" + ftype + "(" + flen + ")" + "\"";
break;
case "nchar":
case "nvarchar":
case "ntext":
typestr = "string";
coltype = "typename = \"" + ftype + "\"";
coltype = " [maxlength(" + flen + ")]";
break;
}
mdstr += " /// <summary>" + Environment.NewLine;
mdstr += " ///" + row["fmemo"].ToString() + " " + row["edit"].ToString() + Environment.NewLine;
mdstr += " /// </summary>" + Environment.NewLine;
if (!string.IsNullOrEmpty(coltype) && str == "")
{
mdstr += " [column(\"" + colname.ToLower() + "\"," + coltype + ")]" + Environment.NewLine;
if (Convert.ToBoolean(row["byxm"]))
{
mdstr += " [required]" + Environment.NewLine;
}
}
mdstr += " public " + typestr + " " + Dxkt(colname) + " { get; set; }" + Environment.NewLine;
}
mdstr += "}" + Environment.NewLine;
Clipboard.SetText(mdstr);
}
private void Makepg()
{
string mdstr = "";
string tbname = ttbmc.Replace("_", "").ToLower();
string tbkey = "";
tbname = Dxkt(tbname);
mdstr += "--看潮企业管理软件 生成代码 岳国军 " + Environment.NewLine;
mdstr += "--" + Environment.NewLine;
mdstr += "-- drop table if exists public." + tbname + ";" + Environment.NewLine;
mdstr += "create table if not exists public." + tbname + Environment.NewLine;
mdstr += "(" + Environment.NewLine;
for (int i = 0; i < dtzd.Rows.Count; i++)
{
DataRow row = dtzd.Rows[i];
string ftype = row["ftype"].ToString().ToLower();
string flen = row["flen"].ToString().Trim();
string colname = row["fname"].ToString().ToLower();
string typestr = "";
switch (ftype)
{
case "bit":
typestr = "boolean not null";
break;
case "smallint":
typestr = "smallint not null default 0";
break;
case "bigint":
case "int":
case "tinyint":
typestr = "integer not null default 0";
break;
case "numeric":
case "decimal":
case "money":
case "smallmoney":
case "float":
case "real":
typestr = "numeric(16,2) not null default 0";
break;
case "date":
typestr = "date";
break;
case "datetime":
typestr = "timestamp with time zone";
break;
case "time":
typestr = "time";
break;
case "char":
case "nchar":
typestr = "character(" + flen + ") collate pg_catalog.\"default\" not null default ''::bpchar";
break;
case "varchar":
case "nvarchar":
typestr = "character varying(" + flen + ") collate pg_catalog.\"default\" not null default ''::character varying";
break;
case "image":
case "varcinary":
typestr = "bytea";
break;
default:
break;
}
if (i == 0)
{
tbkey = colname;
}
if (colname == "id" && ftype == "int")
{
typestr = "integer not null default nextval('" + colname + "_serial_seq'::regclass)";
}
mdstr += " " + colname + " " + typestr + "," + Environment.NewLine;
}
mdstr += " constraint " + tbname + "_pkey primary key (" + tbkey + ")" + Environment.NewLine;
mdstr += ")" + Environment.NewLine;
mdstr += "tablespace pg_default;" + Environment.NewLine;
mdstr += "alter table if exists public." + tbname + " owner to pghy;" + Environment.NewLine;
Clipboard.SetText(mdstr);
}
private void Maketext()
{
string mdstr = "";
string tbname = ttbmc.ToLower();
mdstr += ttbmc + "字段列表:" + Environment.NewLine + Environment.NewLine;
for (int i = 0; i < dtzd.Rows.Count; i++)
{
DataRow row = dtzd.Rows[i];
mdstr += string.Format("{0,-8}", row["fname"]) + "\t";
mdstr += string.Format("{0,-8}", row["ftype"]) + "\t";
mdstr += string.Format("{0,5}", row["flen"]) + "\t";
mdstr += string.Format("{0,-12}", row["fmemo"]) + "\t";
mdstr += string.Format("{0,-8}", row["edit"]) + "\t";
mdstr += string.Format("{0,8}", row["formatstr"]) + Environment.NewLine;
}
mdstr += Environment.NewLine;
Clipboard.SetText(mdstr);
}
private void Mtgv_popupmenushowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
{
try
{
if (e.Menu == null)
{
return;
}
if (e.HitInfo.InColumnPanel)
{
DXMenuItem dxmenu = new DXMenuItem();
dxmenu.Caption = "自动配置列宽";
dxmenu.Click += Dxmenuclick;
e.Menu.Items.Add(dxmenu);
}
}
catch (Exception ex)
{
MsgExShow("增加配置列宽右键菜单", ex.Message, ex.Source, ex.StackTrace);
}
}
private RepositoryItemComboBox Rc(string str)
{
switch (str)
{
case "文本":
return ricombo1;
case "整型":
return ricombo2;
case "数值":
return ricombo3;
case "日期时间":
return ricombo4;
case "逻辑":
return ricombo5;
default:
return null;
}
}
private RepositoryItemComboBox Rf(string str)
{
switch (str)
{
case "文本":
case "整型":
case "数值":
case "日期时间":
return ricombof;
default:
return null;
}
}
private RepositoryItemComboBox Rm(string str)
{
switch (str)
{
case "文本":
case "整型":
case "数值":
case "日期时间":
return ricombom;
default:
return null;
}
}
private RepositoryItemComboBox Rs(string str)
{
switch (str)
{
case "文本":
case "整型":
case "数值":
case "日期时间":
return ricombos;
default:
return null;
}
}
private void SaveFmSet()
{
if (this.WindowState != FormWindowState.Normal)
{
return;
}
try
{
string fmset;
fmset = this.Top.ToString() + "," + this.Left.ToString() + "," + this.Width.ToString() + "," + this.Height.ToString() + "," +
Sp1.SplitterPosition.ToString() + "," + (gdgv == null ? "25" : gdgv.RowHeight.ToString());
if (this.WindowState == FormWindowState.Normal) FmSave(this.Text, fmset);
if (gdgv != null)
{
if (gdgv.RowCount > 0)
{
fmset = gdgv.Columns[0].Width.ToString().Trim();
for (int g = 1; g < gdgv.Columns.Count; g++)
{
fmset = fmset + "," + gdgv.Columns[g].Width.ToString().Trim();
}
FmSave(this.Text + "表格", fmset);
}
}
}
catch (Exception ex)
{
MsgExShow("保存窗口参数", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Setgv(ref GridView gv, bool bj)
{
gv.RowHeight = 30;
gv.ColumnPanelRowHeight = PanelRowHeight;
gv.Appearance.HeaderPanel.TextOptions.VAlignment = VertAlignment.Center;
gv.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
gv.Appearance.HeaderPanel.TextOptions.WordWrap = WordWrap.Wrap;
gv.IndicatorWidth = 20;
gv.OptionsCustomization.AllowRowSizing = true;
gv.OptionsView.ShowGroupPanel = false;
gv.OptionsView.ShowGroupedColumns = false;
gv.OptionsView.ColumnAutoWidth = false;
gv.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
gv.OptionsView.ShowFooter = false;
gv.OptionsBehavior.ReadOnly = !bj;
}
private void View_cellvaluechanged(object sender, CellValueChangedEventArgs e)
{
if (!sfzr) return;
if (sftj)
{
sftj = false;
BarTJ.Enabled = true;
}
}
private void View_keyup(object sender, KeyEventArgs e)
{
//回车后移至下一单元格
if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{down}");
SendKeys.Send("{enter}");
}
}
}
}
二、设计器代码说明
窗体设计器代码文件说明:FmSjzd.Designer.cs
(一)文件概述
文件位置: KcErp 项目
窗体名称: FmSjzd(数据字典管理窗体)
文件类型: Windows Forms 设计器自动生成的代码文件(不应手动修改)
(二)主要控件结构
1. 顶部功能区
- RibbonControl: DevExpress 功能区控件
- RibbonPage1: 主功能页签
- RibbonPageGroup1: 数据操作组(载入、提交)
- RibbonPageGroup2: 打印功能组
- RibbonPageGroup3: 帮助与操作组(列赋值、列清空、帮助、返回)
- RibbonPage1: 主功能页签
2. 状态栏
- RibbonStatusBar: 底部状态栏,包含 L1 状态标签
3. 主界面布局
- Sp1: 垂直分割容器,分为上下两部分
- Panel1(上部控制区): 高度50px,包含筛选和操作按钮
- Panel2(下部数据显示区): 剩余空间,显示 GridZD 网格
4. 控制区组件(Panel1)
- 左侧部分:
- Lzdzl: 字典种类标签
- LabelControl2: 数据表名标签
- CBE2: 表名下拉选择框
- 中部部分:
- Lgnmc: 字典版本标签
- TextBB: 版本号文本框(只读)
- 右侧按钮(从右到左):
- ButtonpPG: 生成PG语句(用于迁移)
- ButtonWB: 生成列表文本(用于保存到文本)
- ButtonCZ: 重置字段列表
- ButtonRF: 刷新字段列表
5. 数据显示区(Panel2)
- GridZD: 数据网格控件
- GridView1: 默认网格视图
- CardView1: 卡片视图
(三)功能区按钮说明
数据操作组:
- BarZR: 载入数据
- BarTJ: 提交修改
打印功能组:
- BarDY: 打印功能
帮助与操作组:
- BarF2: 列赋值(快捷键 Ctrl+F2)
- BarDEL: 列清空(快捷键 Ctrl+Delete)
- BarHELP: 帮助文档
- BarEXIT: 返回/退出
(四)界面特性
- 尺寸: 窗体大小 1550×599 像素
- 布局: 功能区(128px)+ 分割容器(444px)+ 状态栏(27px)
- 字体: 使用“微软雅黑”12号字体
- 定位: 屏幕居中显示
- 工具栏: 隐藏快速访问工具栏
- 背景工作器: BackgroundWorker1 支持取消操作
(五)控件分组说明
| 控件前缀 | 类型 | 用途 |
|---|---|---|
| Bar | Ribbon按钮 | 功能区操作按钮 |
| Ribbon | 功能区组件 | 顶部菜单和工具 |
| Button | 按钮 | 窗体操作按钮 |
| L | LabelControl | 标签说明 |
| Text | TextEdit | 文本输入框 |
| CBE | ComboBoxEdit | 下拉选择框 |
| Grid | GridControl | 数据网格 |
| Sp | SplitContainerControl | 分割容器 |
(六)注意事项
- 设计器代码: 此文件为 Visual Studio 设计器自动生成,手动修改可能导致设计器异常
- 资源释放: Dispose 方法确保控件资源正确释放
- 初始化顺序: InitializeComponent 方法按控件依赖关系顺序初始化
- 事件处理: 所有按钮事件处理应在对应的 .cs 代码文件中实现
- 多视图支持: GridZD 支持网格视图和卡片视图两种显示模式
(七)相关文件
- FmSjzd.cs: 窗体逻辑代码文件
- FmSjzd.resx: 窗体资源文件(如果存在)
提示: 如需修改界面布局,请在 Visual Studio 设计器中进行操作,避免直接修改此文件。
更多推荐
所有评论(0)