在上面一篇随笔《代码生成工具之界面快速生成》介绍了代码生成工具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", "所属部门");#endregionstring 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代码生成工具,一切变得宁静很多,但更加快速。

本文转自博客园伍华聪的博客,原文链接:代码生成工具之Winform查询列表界面生成,如需转载请自行联系原博主。

代码生成工具之Winform查询列表界面生成相关推荐

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

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

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

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

  3. 代码生成工具之界面快速生成

    界面开发,无论对于Web开发,还是Winform开发,都需要耗费一定的时间,特别对于一个数据库字段比较多的界面,一般就需要在编辑界面上摆的更多的控件来做数据显示,每次碰到这个,都有点头痛,反复的机械操 ...

  4. 前端开发自动生成html,专业前端开发人员推荐的几款CSS 3代码生成工具

    本期的前端开发学习主题:关于几款CSS 3代码生成工具的了解学习.相信大家在学习web前端开发学习的过程中或多或少都会接触到一些关于网站前端开发的CSS 3代码生成工具,接下来的学习,将为大家简单说说 ...

  5. 代码生成工具随笔(2) ---我的生成工具

    目前有很多代码生成工具,很多做得很好,我在上一篇关于代码生成工具的随笔(代码生成工具随笔(1) ---关于代码生成器 )中,大概介绍了一些代码生成工具的现状,也得到很多人的关注. 由于本人很早就在代码 ...

  6. vue可视化拖拽生成工具_vdesjs: 基于vue的可视化拖拽,代码生成工具。提升前端开发效率,或者集成至项目作为在线拖拽工具。(持续迭代升级中)...

    vdesjs 介绍 vdesjs是一款基于vue技术栈,可视化拖拽,代码生成工具.我们提供详细的文档来帮助您理解我们工具的实现原理,并且您可以方便的基于vdesjs来扩展您自己的代码生成组件. 技术选 ...

  7. 二维码图片生成工具C#winform源码

    二维码图片生成工具C#winform源码 源码描述: 一.源码特点 采用winform进行开发,生成二维码并保存,欢迎下载 二.功能介绍 本源码是一个可以自动生成二维码图片的小模块,可以添加自己的lo ...

  8. matlab 生成plc程序,利用MATLABsimulink的自动代码生成工具开发PLC程序..docx

    利用MATLABsimulink的自动代码生成工具开发PLC程序. 利用MATLAB/simulink的自动代码生成工具开发PLC程序MATLAB之控制系统 2010-07-07 15:17:43 阅 ...

  9. beego mysql 生成_beego 代码生成工具体验

    # beego 代码生成工具体验 ## 设计 MySQL 数据库 1. 通过 MySQL Workbench EER Digram 设计表和关系 ![image.png](https://static ...

最新文章

  1. linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解
  2. Spring boot格式化器
  3. Twitter的分布式自增ID算法snowflake (Java版)
  4. 华为EC169 3G卡在Win7下的安装
  5. windows安装python2.7_Windows下安装python2.7及科学计算套装
  6. nis从服务器接替nis主服务器步骤
  7. 基于麻雀算法优化的核极限学习机(KELM)分类算法 - 附代码
  8. 使用 SDK (Nodejs)操作阿里 OSS (对象存储服务)学习笔记
  9. m2接口和nvme协议接口_怎么看笔记本的主板是支持加装m2接口和m2协议NVME接口的固态硬盘?两者有什么区别?...
  10. java前端vml_在Web中使用JavaScript和VML实现WebGIS中的测距
  11. STM32理论 —— 综述、GPIO
  12. centos7.4 编译 找不到 -lGL
  13. java 切换系统输入法_系统语言改变时,输入法变成默认输入法分析
  14. 快速寻找研究方向+发文章的方法!!按头安利!
  15. html页面整体偏移了怎么办,html2canvas生成的图片偏移不完整的解决方法
  16. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
  17. java反射 enum参数_CookBook/3-Java反射.md at master · Byron4j/CookBook · GitHub
  18. BMC Eaglestream利用PECI计算CPU、Memory功耗
  19. 华为南研所校招软件技术岗几点建议
  20. 国产数据库,不是造富神话

热门文章

  1. Charles调试Https Android
  2. OpenCV删除面积小的区域 实现图像二值化分割 标记连通区域
  3. 分布式实时计算—实时数据质量如何保障?
  4. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
  5. 精简改良(生成树dp)
  6. Nexus-vPC与FHRP
  7. delphi实现两个目录路径的链接
  8. H5+Mui文件配置 vue-resource基本使用方法
  9. mysql安装中出现的问题,
  10. 分组,命名分组,url的命名和反向解析