zoukankan      html  css  js  c++  java
  • 很方便的工具——代码生成工具之Winform查询列表界面生成

    代码生成工具之Winform查询列表界面生成(这篇文章是借鉴http://www.cnblogs.com/wuhuacong/archive/2012/09/24/2699903.html 的)

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

  • 相关阅读:
    windows nginx
    stdClass 标准
    array_merge
    array_pop
    array_push
    array_unique
    GMT与UTC简介(转)
    curl-手册
    13.5. zipfile — Work with ZIP archives
    7. Input and Output
  • 原文地址:https://www.cnblogs.com/lvk618/p/3345532.html
Copyright © 2011-2022 走看看