代码生成工具之Winform查询列表界面生成

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

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

时间: 2024-10-12 20:42:53

代码生成工具之Winform查询列表界面生成的相关文章

基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录进行合理的分页,集成各种增删改查的按钮等功能.随着开发项目的需求变化,对数据记录分页展示.排序等功能都是常态的要求,因此在代码生成工具中调整了主列表界面的列表展示插件为Bootstrap-table插件,本篇随笔主要介绍在代码生成工具Database2Sharp中集成对Bootstrap-table

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

在Winform界面开发的时候,有时候我们客户喜欢把功能放在列表界面的顶部,这样界面和功能整齐放置,也是一种比较美观的方式,基于这种方式的考虑,改造了代码生成工具的Winform界面生成规则,把增删改查的常规处理功能抽取简化的函数,易于在实际项目中使用工具栏的方式处理. 1.常规的Winform界面 我们在之前的界面中,通常都是使用一些按钮,以及右键菜单的方式进行功能的展示,如下界面所示. 这种方式是我们常规的界面生成和布局方式,对于功能相对较少的业务模块来说,是比较简洁的,多数操作都放在了右键

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

在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常见的,为了提高代码生成和界面生成的效率,基于视图开发的过程也应该支持.还有主从表的界面生成操作,在很多实际的业务领域也是很常见的.基于上面的需求,本次代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能,为客户的高效率开发快马加鞭.保驾护航. 1.基于视图的代码生成和界

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

界面开发,无论对于Web开发,还是Winform开发,都需要耗费一定的时间,特别对于一个数据库字段比较多的界面,一般就需要在编辑界面上摆的更多的控件来做数据显示,每次碰到这个,都有点头痛,反复的机械操作让人挺累,也很烦,但是又必须这样做. 由于数据库字段和界面的排版都有一定的关联关系,因此可以通过代码生成工具Database2Sharp的数据库元数据,包含表名称.备注信息.字段列表,以及每个字段的名称.备注.类型等信息,构造一个基础的界面,把重复机械的部分给快速完成,这就是我所说的界面快速生成.

Database2Sharp代码生成工具使用心得

Database2Sharp是一款主要用于C#代码以及数据库文档生成的工具,软件支持Oracle.SqlServer.MySql.Access.Sqlite等数据库的代码生成,可以生成各种架构代码.生成Winform界面代码.Web界面代码.导出数据库文档.浏览数据库架构.查询数据.生成Sql脚本等,还整合自定义模板和数据库信息的引擎,方便编写自定义模板调试和开发. 1.EnterpriseLibrary架构代码生成 1.1 代码生成总体概述 EnterpriseLibrary代码生成时一个整体

代码生成工具之数据库表及字段名称转义

在上篇随笔<代码生成工具之界面快速生成>中介绍过了代码生成工具Database2Sharp是如何快速生成所需的Web界面以及各种Winform界面,其中包括生成即可运行的Web界面效果,Winform布局信息的生成.这些看似很简单的界面元素生成,其实是需要丰富的数据库元数据信息作为基础的,而且对不同的数据库处理要有所不同.本文介绍不同数据库之间元数据的处理差别,以及如何代码生成工具Database2Sharp如何兼容处理这些问题的. 1.常规的数据库表.字段名称的转义 例如,我们需要获取表的别

Database2Sharp2009 代码生成工具

NHibernate.Castle-ActiveRecord和PetShop架构的C#代码生成工具 Database2Sharp       文件大小:  5655KB   更新时间:  2009-5-7 下载地址:   http://www.iqidi.com/Download/Database2SharpSetup.rar 在线帮助:   2009-5-7修改:增加企业级别的界面自动生成,集成在Enterprise Library架构中,并更新EditControl.SearchContro

Asp.Net权限管理系统 专用代码生成工具(DDBuildTools) 1.1.0 下载_服务器

DDBuildTools 1.1.0 是supesoft.com为Asp.Net权限管理系统开发的一套代码生成工具.其主要功能: 1.根据数据库表结构生成数据库表结构文档 2.根据数据库表结构生成符合 Asp.Net权限管理系统 的数据库操作代码(支持Access和MsSql2000/2005) 表结构需有标识字段 3.根据数据库表结构生成MsSql2000/2005的表增加/删除/修改 存储过程 4.根据数据库表结构生成符合 Asp.Net权限管理系统 的前台表数据的新增/修改/删除/列表/查

WCF开发框架形成之旅---结合代码生成工具实现快速开发

我的WCF开发框架推出很久了,一直有不少的朋友支持及提供良好的完善意见,随着利用这种基于Winform界面的WCF开发框架开发了不同类型的项目,各种WCF对象的调用及处理逐渐稳定及统一化,因此是时候让我的开发伴侣(代码生成工具Database2Sharp)来做更多更有技术性的工作了---提供基于我的WCF开发框架模式创建的项目工程及调用WCF的Winform界面处理代码.这样在WCF快速开发框架中,有了更强更高效率的支持,整个项目的开发,就更加是水到渠成,闲庭散步了. 因此,代码生成工具生成框架