在上面一篇随笔《代码生成工具之界面快速生成》介绍了代码生成工具Database2Sharp的界面生成操作,其中介绍了Web界面(包括列表界面、内容显示、内容编辑界面的生成,另外还介绍了Winform界面的内容编辑界面的生成,本篇主要继续介绍Winform界面生成中的查询列表界面的操作展示等信息。

基于Winform的界面生成,配合我的Winform开发框架,提供了三种不同的界面生成,包括传统界面样式、DotNetBar界面样式和DevExpress界面样式的代码生成,这几种界面是目前Winform开发中非常常见的界面样式。

1、EnterpriseLibray架构代码及Web界面生成

基于EnterpriseLibray架构的代码生成,除了可以生成传统的业务层、数据访问层、数据访问接口层、实体层外,还同时生成了Web界面工程,Web界面工程已经添加了相关的引用程序集及必须的控件,生成后即可编译运行,一些表字段设计合理的话,甚至不用修改一行代码就能直接使用,如下所示。

生成的Web界面截图如下所示,包含列表查询界面、内容显示界面、内容编辑界面等。

内容编辑界面(新增和编辑)如下所示。

2、Winform界面生成
1)Winform数据编辑界面生成

在上面一篇随笔《代码生成工具之界面快速生成》同时也介绍了Winform界面的生成,上一篇主要介绍了Winform界面中的数据编辑界面。

Winform界面生成界面提供了很多参数进行控制,以期生成精细化的界面内容。

DevExpress界面样式的生成。

传统样式的界面生成。

2)Winform查询列表界面生成

很多情况下,查询列表界面很常见,如果能快速生成标准的界面,除了可以节省时间,提高开发效率外,也给我们统一界面风格及代码风格等方面,提供更好的支持。

复杂累赘的界面能够自动生成,绝对是开发过程的一大提升,让我们更加享受开发的乐趣。

1)设置好相关的界面参数,如指定列表的查询字段、列表显示字段,选择界面样式,以及设定代码的主命名空间等参数。

2)生成界面代码到文件后,把文件直接复制到项目中,不用修改直接就可以看到列表界面效果,Yeah,正是我们需要的样式。

当然,上面的查询条件可以一行,也可以两行或者多行,界面生成的时候,会自动合理计算好布局,保证完美展现我们想要的列表界面效果。以上界面几乎不用任何修改就直接可以编译运行,里面的后台代码也同时生成了。

后台代码里面生成包括,分页控件展示及列表查询显示、Excel数据导入、数据导出等功能的后台界面代码。以下就是完整生成的界面后台代码,没有编辑过的列表界面后台代码如下所示。

public partial class FrmItemDetail : BaseDock
{
public FrmItemDetail2()
{
InitializeComponent(); InitDictItem(); this.winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);
this.winGridViewPager1.OnStartExport += new EventHandler(winGridViewPager1_OnStartExport);
this.winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected);
this.winGridViewPager1.OnAddNew += new EventHandler(winGridViewPager1_OnAddNew);
this.winGridViewPager1.OnDeleteSelected += new EventHandler(winGridViewPager1_OnDeleteSelected);
this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);
this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;
this.winGridViewPager1.ShowLineNumber = true; this.txtItemNo.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtItemName.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtManufacture.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtMapNo.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtSpecification.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtMaterial.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtItemBigType.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtItemType.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtUnit.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);
this.txtSource.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp); } /// <summary>
/// 编写初始化窗体的实现,可以用于刷新
/// </summary>
public override void FormOnLoad()
{
BindData();
} /// <summary>
/// 初始化字典列表内容
/// </summary>
private void InitDictItem()
{
//初始化代码
} /// <summary>
/// 分页控件刷新操作
/// </summary>
private void winGridViewPager1_OnRefresh(object sender, EventArgs e)
{
BindData();
} /// <summary>
/// 分页控件删除操作
/// </summary>
private void winGridViewPager1_OnDeleteSelected(object sender, EventArgs e)
{
if (MessageDxUtil.ShowYesNoAndTips("您确定删除选定的记录么?") == DialogResult.No)
{
return;
} int[] rowSelected = this.winGridViewPager1.GridView1.GetSelectedRows();
foreach (int iRow in rowSelected)
{
string ID = this.winGridViewPager1.GridView1.GetRowCellDisplayText(iRow, "ID");
BLLFactory<ItemDetail>.Instance.Delete(ID);
} BindData();
} /// <summary>
/// 分页控件编辑项操作
/// </summary>
private void winGridViewPager1_OnEditSelected(object sender, EventArgs e)
{
string ID = this.winGridViewPager1.gridView1.GetFocusedRowCellDisplayText("ID");
List<string> IDList = new List<string>();
for (int i = 0; i < this.winGridViewPager1.gridView1.RowCount; i++)
{
string strTemp = this.winGridViewPager1.GridView1.GetRowCellDisplayText(i, "ID");
IDList.Add(strTemp);
} if (!string.IsNullOrEmpty(ID))
{
FrmEditItemDetail dlg = new FrmEditItemDetail();
dlg.ID = ID;
dlg.IDList = IDList;
if (DialogResult.OK == dlg.ShowDialog())
{
BindData();
}
}
} /// <summary>
/// 分页控件新增操作
/// </summary>
private void winGridViewPager1_OnAddNew(object sender, EventArgs e)
{
btnAddNew_Click(null, null);
} /// <summary>
/// 分页控件全部导出操作前的操作
/// </summary>
private void winGridViewPager1_OnStartExport(object sender, EventArgs e)
{
string where = GetConditionSql();
this.winGridViewPager1.AllToExport = BLLFactory<ItemDetail>.Instance.FindToDataTable(where);
} /// <summary>
/// 分页控件翻页的操作
/// </summary>
private void winGridViewPager1_OnPageChanged(object sender, EventArgs e)
{
BindData();
} /// <summary>
/// 根据查询条件构造查询语句
/// </summary>
private string GetConditionSql()
{
SearchCondition condition = new SearchCondition();
condition.AddCondition("ItemNo", this.txtItemNo.Text, SqlOperator.Like);
condition.AddCondition("ItemName", this.txtItemName.Text, SqlOperator.Like);
condition.AddCondition("Manufacture", this.txtManufacture.Text, SqlOperator.Like);
condition.AddCondition("MapNo", this.txtMapNo.Text, SqlOperator.Like);
condition.AddCondition("Specification", this.txtSpecification.Text, SqlOperator.Like);
condition.AddCondition("Material", this.txtMaterial.Text, SqlOperator.Like);
condition.AddCondition("ItemBigType", this.txtItemBigType.Text, SqlOperator.Like);
condition.AddCondition("ItemType", this.txtItemType.Text, SqlOperator.Like);
condition.AddCondition("Unit", this.txtUnit.Text, SqlOperator.Like);
condition.AddCondition("Source", this.txtSource.Text, SqlOperator.Like); string where = condition.BuildConditionSql(DatabaseType.SqlServer).Replace("Where", ""); return where;
} /// <summary>
/// 绑定列表数据
/// </summary>
private void BindData()
{
this.winGridViewPager1.DisplayColumns = "ItemNo,ItemName,Manufacture,MapNo,Specification,Material,ItemBigType,ItemType,Unit,Price,Source,StoragePos,UsagePos,Note,WareHouse,Dept";
#region 添加别名解析 this.winGridViewPager1.AddColumnAlias("ItemNo", "备件编号");
this.winGridViewPager1.AddColumnAlias("ItemName", "备件名称");
this.winGridViewPager1.AddColumnAlias("Manufacture", "供货商");
this.winGridViewPager1.AddColumnAlias("MapNo", "图号");
this.winGridViewPager1.AddColumnAlias("Specification", "规格型号");
this.winGridViewPager1.AddColumnAlias("Material", "材质");
this.winGridViewPager1.AddColumnAlias("ItemBigType", "备件属类");
this.winGridViewPager1.AddColumnAlias("ItemType", "备件类别");
this.winGridViewPager1.AddColumnAlias("Unit", "单位");
this.winGridViewPager1.AddColumnAlias("Price", "单价");
this.winGridViewPager1.AddColumnAlias("Source", "来源");
this.winGridViewPager1.AddColumnAlias("StoragePos", "库位");
this.winGridViewPager1.AddColumnAlias("UsagePos", "使用位置");
this.winGridViewPager1.AddColumnAlias("Note", "备注");
this.winGridViewPager1.AddColumnAlias("WareHouse", "所属库房");
this.winGridViewPager1.AddColumnAlias("Dept", "所属部门"); #endregion string where = GetConditionSql();
List<ItemDetailInfo> list = BLLFactory<ItemDetail>.Instance.FindWithPager(where, this.winGridViewPager1.PagerInfo);
this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<ItemDetailInfo>(list);
this.winGridViewPager1.PrintTitle = Portal.gc.gAppUnit + " -- " + "信息报表";
} /// <summary>
/// 查询数据操作
/// </summary>
private void btnSearch_Click(object sender, EventArgs e)
{
BindData();
} /// <summary>
/// 新增数据操作
/// </summary>
private void btnAddNew_Click(object sender, EventArgs e)
{
FrmEditItemDetail dlg = new FrmEditItemDetail();
if (DialogResult.OK == dlg.ShowDialog())
{
BindData();
}
} /// <summary>
/// 提供给控件回车执行查询的操作
/// </summary>
private void SearchControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnSearch_Click(null, null);
}
} private string moduleName = "备件信息";
/// <summary>
/// 导入Excel的操作
/// </summary>
private void btnImport_Click(object sender, EventArgs e)
{
string templateFile = string.Format("{0}-模板.xls", moduleName);
FrmImportExcelData dlg = new FrmImportExcelData();
dlg.SetTemplate(templateFile, System.IO.Path.Combine(Application.StartupPath, templateFile));
dlg.OnDataSave += new FrmImportExcelData.SaveDataHandler(ExcelData_OnDataSave);
dlg.OnRefreshData += new EventHandler(ExcelData_OnRefreshData);
dlg.ShowDialog();
} void ExcelData_OnRefreshData(object sender, EventArgs e)
{
BindData();
} bool ExcelData_OnDataSave(DataRow dr)
{
bool success = false;
ItemDetailInfo info = new ItemDetailInfo();
info.ItemNo = dr["备件编号"].ToString();
info.ItemName = dr["备件名称"].ToString();
info.Manufacture = dr["供货商"].ToString();
info.MapNo = dr["图号"].ToString();
info.Specification = dr["规格型号"].ToString();
info.Material = dr["材质"].ToString();
info.ItemBigType = dr["备件属类"].ToString();
info.ItemType = dr["备件类别"].ToString();
info.Unit = dr["单位"].ToString();
info.Price = Convert.ToDecimal(dr["单价"].ToString());
info.Source = dr["来源"].ToString();
info.StoragePos = dr["库位"].ToString();
info.UsagePos = dr["使用位置"].ToString();
info.Note = dr["备注"].ToString();
info.WareHouse = dr["所属库房"].ToString();
info.Dept = dr["所属部门"].ToString(); success = BLLFactory<ItemDetail>.Instance.Insert(info);
return success;
} /// <summary>
/// 导出Excel的操作
/// </summary>
private void btnExport_Click(object sender, EventArgs e)
{
string file = FileDialogHelper.SaveExcel(string.Format("{0}.xls", moduleName));
if (!string.IsNullOrEmpty(file))
{
List<ItemDetailInfo> list = BLLFactory<ItemDetail>.Instance.GetAll();
DataTable dtNew = DataTableHelper.CreateTable("序号|int");
DataRow dr;
int j = 1;
for (int i = 0; i < list.Count; i++)
{
dr = dtNew.NewRow();
dr["序号"] = j++;
dr["备件编号"] = list[i].ItemNo;
dr["备件名称"] = list[i].ItemName;
dr["供货商"] = list[i].Manufacture;
dr["图号"] = list[i].MapNo;
dr["规格型号"] = list[i].Specification;
dr["材质"] = list[i].Material;
dr["备件属类"] = list[i].ItemBigType;
dr["备件类别"] = list[i].ItemType;
dr["单位"] = list[i].Unit;
dr["单价"] = list[i].Price;
dr["来源"] = list[i].Source;
dr["库位"] = list[i].StoragePos;
dr["使用位置"] = list[i].UsagePos;
dr["备注"] = list[i].Note;
dr["所属库房"] = list[i].WareHouse;
dr["所属部门"] = list[i].Dept;
dtNew.Rows.Add(dr);
} try
{
string error = "";
AsposeExcelTools.DataTableToExcel2(dtNew, file, out error);
if (!string.IsNullOrEmpty(error))
{
MessageDxUtil.ShowError(string.Format("导出Excel出现错误:{0}", error));
}
else
{
if (MessageDxUtil.ShowYesNoAndTips("导出成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(file);
}
}
}
catch (Exception ex)
{
LogHelper.Error(ex);
MessageDxUtil.ShowError(ex.Message);
}
}
}
}

传统界面效果生成操作,只需要选择传统界面样式,生成即可,得到的初始化界面如下所示。

如果是只是指定了几个查询条件(一行的情况),那么工具会自动计算好布局位置,得到界面效果如下所示。

代码生成工具Database2Sharp还提供了生成基于DotNetbar的样式的查询列表界面代码,和上图类似,在此不再赘述。

通过代码生成工具,不仅可以生成整体性的EnterpriseLibary框架结构代码,连我们繁琐的Web界面、Winform界面都能快速、高标准生成,开发界面其实是一件很轻松快速的事情,不要整天从数据库字段和界面属性设置中来回切换了。有了Database2Sharp代码生成工具,一切变得宁静很多,但更加快速。

原著链接:http://www.cnblogs.com/wuhuacong/archive/2012/09/24/2699903.html

Web界面和Winform界面生成,代码生成工具的更多相关文章

  1. Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用

    前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...

  2. 代码生成工具更新--快速生成Winform框架的界面项目

    在之前版本的代码生成工具Database2Sharp中,由于代码生成都是考虑Winform和Web通用的目的,因此Winform界面或者Web界面都是单独生成的,在工具中生成相应的界面后,复制到项目里 ...

  3. 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。

    在Winform界面开发的时候,有时候我们客户喜欢把功能放在列表界面的顶部,这样界面和功能整齐放置,也是一种比较美观的方式,基于这种方式的考虑,改造了代码生成工具的Winform界面生成规则,把增删改 ...

  4. 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能

    在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...

  5. 使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面

    世界上唯一不变的东西就是变化,我们通过总结变化的规律,以规律来应付变化,一切事情处理起来事半功倍.我们在开发后端服务代码,前端界面代码的时候,界面都是依照一定的规律进行变化的,我们通过抽取数据库信息, ...

  6. 基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成

    在前面随笔<基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理>中我们已经介绍过,对于相关的业务表的界面代码,我们已经尽可能把不同的业务逻辑 ...

  7. 利用代码生成工具Database2Sharp设计数据编辑界面

    在Winform程序开发中,界面部分的开发工作量一般是比较大的,特别是表的字段数据比较多的情况下,数据编辑界面所需要的繁琐设计和后台逻辑处理工作量更是直线上升,而且稍不注意,可能很多处理有重复或者错误 ...

  8. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  9. 利用代码生成工具生成基于ABP框架的代码

    在前面随笔,我介绍了整个ABP优化过框架的分层模型,包括尽量简化整个ABP框架的各个层的关系,以及纳入一些基类的辅助处理,使得我们对应业务分层类或者接口尽可能减少代码,并具有生产环境所需要的基类接口, ...

随机推荐

  1. tp js结合时间戳

    $(document).ready(function(){ $.extend({ show:function(){ } }); setInterval("show()",1000) ...

  2. php 遍历一个文件夹下的所有文件和子文件

    php 遍历一个文件夹下的所有文件和子文件 <?php /** * 将读取到的目录以数组的形式展现出来 * @return array * opendir() 函数打开一个目录句柄,可由 clo ...

  3. sea.js模块化工具

    sea.js 一. sea.js向全局中引入了两个变量seajs.define: 1.seajs用加载文件 seajs.use(deps,callback)异步引入入口模块 路径要以sea.js文件所 ...

  4. Cab 安装不成功问题

    使用 iexpress.exe 成功打包了cab文件. 可下面问题来了,用静态的html调用,提示安装. 确认安装之后,却提示找不到相应的*.ocx,导致无法安装文件到系统 分析具体原因:*.ocx ...

  5. Python学习手册之数据封装、类方法、静态方法和属性函数

    在上一篇文章中,我们介绍了 Python 的内部方法.操作符重载和对象生命周期,现在我们介绍 Python 的数据封装.类方法.静态方法和属性函数.查看上一篇文章请点击:https://www.cnb ...

  6. 说一说MySQL的锁机制

    锁概述 MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则. 最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁. 表锁就是把 ...

  7. Tomcat7 调优及 JVM 参数优化

      Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证 ...

  8. 20145202马超《网络对抗》Exp5MSF基础应用

    20145202马超<网络对抗>Exp5MSF基础应用 本实践目标,掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067 ...

  9. 20145234黄斐《信息安全系统设计基础》第六周学习总结(Y86模拟器的安装)

    Y86模拟器的安装 由于本人的电脑有些问题,在安装的时候忽然断电导致之前的成果都没有截图. 1.安装bison和flex词法分析工具 sudo apt-get install bison flex t ...

  10. OpenCV 3.2 Tracking 物体跟踪

    跟踪就是在连续视频帧中定位物体,通常的跟踪算法包括以下几类: 1. Dense Optical Flow 稠密光流 2. Sparse Optical Flow 稀疏光流 最典型的如KLT算法(Kan ...