四界面设计
设计此工具给个人使用,故不设计登录界面已经账号权限等相关功能。
4.1 主界面
需要分2个主要模块
1 项目
界面管理:项目基本信息,项目下属表信息,数据表下属的字段信息。
2 生成
界面管理:项目配置信息,已经代码生成功能。
如图:
操作要点:
窗体IsMdiContainer设置成true
添加一个menuStrip控件放置在窗体最上方。如图:在控件中添加2项:项目,生成。
每一项的点击事件中添加一个窗体显示代码。FProjectTableColumnList为项目,数据表,字段显示窗体。如:
private void 项目PToolStripMenuItem_Click(object sender, EventArgs e)
{
FProjecTableColumList fptc = new FProjecTableColumList();
fptc.MdiParent = this;
fptc.Show();
}
4.2 项目界面,
项目界面(FProjectTableColumnList)划分左中右3个部分。从左到有分别为:项目列表,数据表列表,字段列表。
项目列表,鼠标左键双击后中间的数据表会查询选中项目下属所有数据表信息。
数据表列表,鼠标左键双击后右侧字段列表会查询此表中所有字段信息。
图例中,选定“AutoIndictment”项目,选定“indictment”数据表
如图:
邮件操作:
在各个列表区域内,鼠标右键会弹出功能菜单,菜单中包含3个功能:新建,修改,删除。
系统会自动判断鼠标在那个列表区域点击弹出的菜单功能,进而会弹出对应的操作界面。
如图:
此右键菜单需要在界面添加一个ContextMenuStrip控件。命名为ctmsProject 如图:
鼠标选中ContextMenuStrip右键选择“编辑项”如图:
在“成员”列表中添加3个成员,分别为新建,修改,删除。界面右侧为属性编辑窗口。修改属性Text的内容。(如有需要也可以按照自己的设计修改属性。)
鼠标左键选中“ContextMenuStrip”后见面左上角会出现展示样式如图:
双击“新建”按钮,系统自动添加新建按钮对应的点击事件。
为了能区分弹出菜单来自哪里(项目,数据表,字段表)给ContextMenuStrip添加了一个Item_Click事件ctmsProject_ItemClicked。在事件代码中只记录事件激活来源。代码如下:
private void ctmsProject_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
string str1 = (sender as ContextMenuStrip).SourceControl.Name;
_menuSourceName = str1;
}
在新建按钮点击的事件中会跟据这个事件来源,显示不同的操作界面。图中FProjectEdite为项目编辑窗体。
if (_menuSourceName.Equals("lbProject"))
{
FProjectEdit fpe = new FProjectEdit(null);
fpe.Owner = this;
fpe.ShowDialog();
}
给每个区域都添加鼠标抬起时间Mouse_Up在事件代码中,判断为鼠标右键,则显示此功能菜单。例如:项目列表为ListBox起名为lbProject在给此控件增加lbProject_MouseUp事件代码如下:
private void lbProject_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ctmsProject.Show(lbProject, e.Location);
}
}
4.3 参数设置
如图:
项目参数与代码生成相关的参数信息。
信息说明
命名空间:会在代码生成的时候嵌入代码,需要与实际项目的命名空间一致。当然如果不一致不影响生成过程,但更新到项目之后需要手动修改,否则会造成一定麻烦。
路径:代码生成后保存的路径。
数据:项目的数据库连接串。在自动更新的时候需要采用此信息,直接连接数据库更新数据库结构。
逻辑处理:是否生成BLL的相关代码
生成接口:是否生成接口代码。目前是一般处理程序的方式实现接口。
展示界面(aspx层):根据模板生成对应的aspx界面(List.asxp主界面,add和edite为弹出层的方式实现。)
项目路径:为项目存放路径。在自动更新的时候需要采用此信息,直接复制生成代码文件到项目对应文件夹,并修改项目描述文件(*.csproj)
按钮说明
保存:仅仅把界面信息保存到参数配置表中。
生成:先保存参数配置,然后生成代码,代码存放在路径中。
自动更新:保存参数配置,然后生成代码,自动复制代码到项目中。
代码生成后保存到指定位置。如图:
五逻辑代码
页面初始化的时候需要获取数据库中全部的项目信息。这就设计到跟数据库的交互过程。此处就项目列表初始化,介绍此过程,后续章节会详细介绍业务逻辑层,已经数据操作层详细设计以及实现。
BLLProject类业务逻辑操作层,有关项目所有操作的集合。
DALProject类为数据操作层,有关项目所有操作的集合。
备注:
显示层只会调用业务逻辑成代码,不会直接调用数据操作层代码。也是分层治理的好处。由本工具体积不大,是否有必要如此设计不进行讨论。个人喜欢而已。
5.1 窗体加载
窗体加载事件为FProjecTableColumList_Load 在此过程中,加载必要的数据信息,对窗体控件进行初始化。
此处实际功能为:获取所有项目信息,并初始化到项目listbox中。代码如下:
private void FProjecTableColumList_Load(object sender, EventArgs e)
{
List<Project> arr = BLL.BLLProject.Select();
lbProject.DataSource = arr;
lbProject.DisplayMember = "name";
lbProject.ValueMember = "code";
}
BLL.BLLProject.Select()为查询数据库中所有项目基本信息,并返回查询结果集合。然后把此集合绑定在listbox上。并设置现在属性。
5.2 数据联动
窗体中的数据表列表也是listbox控件,由于数据表与项目存在隶属关系,在用户为选定项目的时候,数据表控件不应该显示内容,故对数据表listbox需要实现与项目列表的数据联动效果,即切换不同的项目,数据表列表内容会随之改变。
这个效果的源头为项目列表的选中项序号改变。在此处给项目列表控件设置了双击事件即lbProject_DoubleClick。代码如下:
private void lbProject_DoubleClick(object sender, EventArgs e)
{
string projectCode = lbProject.SelectedValue.ToString();
List<Table> arrAll = BLL.BLLTable.SelectByProject(projectCode);
List<Table> arr =null;
if (arrAll != null)
{
if (cbShowSys.Checked)
{
arr = arrAll;
}
else {
arr = ( from a in arrAll where a.is_system == false select a ).ToList();
}
}
if (arr == null)
{
arr = new List<Table>();
}
lbTable.DataSource = arr;
lbTable.DisplayMember = "name";
lbTable.ValueMember = "code";
}
由于项目列表,绑定的是实体模型project故在取得当前选中项的时候,可以把选中项直接转换成实体project。
然后根据选中的项目信息去查询项目下所有数据表信息。并绑定在数据表listbox上,到此哇噢成了,数据联动效果。
备注:
从代码中可以看出来,在查询数据表之后又一个过滤的过程,此过程的目地为,过滤掉系统级别的数据库,此类数据表多为系统自带数据表,一般情况不需要用户操作的数据表。例如:用户基本信息表,权限表等。再后续的数据库设计章节会详述。
数据联动还存在于数据表与字段列表中。过程类似不进行赘述。