新普金娱乐Winform开发框架的重点特色总结。Winform开发框架的统计图表的贯彻。

从Winform开发框架的研讨和放大,也举行了发生几只新春了,从早期的种类雏形到当前各种重要特征的加入到,是由此了多门类的总概括和升华,有些则是依据客户需要或者下前景的急需开展的健全,整个Winform开发框架具有很好之通用性和借鉴性,本文自该Winform开发框架进行包括总结,力求将各个重要的特色开展部分详细的说明,使大家探听任何Winform开发框架的样子与特色。

于前方的有的随笔中,介绍了森己的Winform框架的特性,上篇随笔《Winform开发框架的通用高级查询模块》对其中的通用高级模块进了一个疏理说明,本篇继续介绍Winform开发框架重要之一个风味的统计图表的实现。统计图表在不少档次都可能用到,集成到框架中,更利于大家对有些图纸项目的规划理解以及效能的选用。在相似的风俗人情的框架中,可以下ZedGraph开源控件或者微软于带的MSChart进行图片设计,DevExpress控件套件有投机的图片控件,本篇主要介绍因DevExpress控件的图纸控件进行图纸设计,进一步丰富自己的Winform开发框架。

Winform开发框架总体性概括出:支持插件化应用开发,能够动态配置和加载开发的插件;菜单支持动态配置,可依据用户权限进行动态控制显示;集成各种独立开发好的模块,如权限管理体系、字典管理模块等,自动更新模块等,实现系统的权位控制、字典管理、软件支持远程自动更新等力量;可重复使用的系基础模块,Winform分页控件和.NET开发公用类库等;整个框架通过和代码生成工具Database2Sharp进行配合,能够一键变整体性框架代码,Winform系统界面代码,开发再快捷。

1、普通统计图表模块

此地指的家常统计图表,只是对表某一类开展单一的统计,可以起饼状图、柱状图的图形中体现这些类别分别所占有的比例及频繁价,在自身的普通统计图表模块中,包括了饼状图、柱状图与数目表格,这样又便民对数据开展完善的剖析及查阅。整个模块是可选用的,除了制定字段属性就可以比合理之展现出非跟分类项目的统计功能了,具体成效图如下所示。

新普金娱乐 1

点的统计图表中,还含有了下面两独功能模块,如下所示。

新普金娱乐 2

新普金娱乐 3

经以上饼图、柱状图及数据报表,我们可死鲜明地看看各种统计项目的数值与总体直观的显现图表了。

出于对当时类型的图纸进行了起定义控件的卷入,因此调用非常方便,调用代码如下所示。

1)绑定统计树形列表

为给用户展示框架(或者项目)支持的表格项目,我们要以左边的树形列表中初始化一些表项目,具体代码如下所示。

            #region 备件信息统计
            this.treeItemDetail.Nodes.Clear();
            TreeNode node;

            node = new TreeNode("备件属类统计", 0, 0);
            node.Tag = "ItemBigType";
            this.treeItemDetail.Nodes.Add(node);

            node = new TreeNode("备件类别统计", 0, 0);
            node.Tag = "ItemType";
            this.treeItemDetail.Nodes.Add(node);

            node = new TreeNode("备件材质统计", 0, 0);
            node.Tag = "Material";
            this.treeItemDetail.Nodes.Add(node);

            node = new TreeNode("备件名称统计", 0, 0);
            node.Tag = "ItemName";
            this.treeItemDetail.Nodes.Add(node);

            node = new TreeNode("所属库房统计", 0, 0);
            node.Tag = "WareHouse";
            this.treeItemDetail.Nodes.Add(node);

            node = new TreeNode("所属部门统计", 0, 0);
            node.Tag = "Dept";
            this.treeItemDetail.Nodes.Add(node);

            //自定义输入字段统计
            node = new TreeNode("备件数据动态统计", 0, 0);
            node.Tag = "Customed";
            this.treeItemDetail.Nodes.Add(node);

            #endregion

地方的树形列表中,我们深受Tag赋值,一般景象下是表字段的名称,有些特殊之,则采取Customed来代表,我们应树形列表控件的操作,根据Tag的异,切换至不同的表格自定义控件进行展现(包括打定义动态项目统计图表和一般性统计图表项目)。

由于我们本着图片的表现进行了比较客观之包裹,因此大多普通的图片统计项目,只是字段名称的例外。

新普金娱乐 4

于常见统计图表项目FrmCategoryReport,这个是一个自定义控件来之,方便动态加载到右边的示Panel区域,这样咱们就算能因不同品种的表动态加载。

新普金娱乐 5

创办图表的代码如下所示。

        private DataTable dt = null;
        private void BindData()
        {
            if (string.IsNullOrEmpty(FieldName)) return;

            //设置报表标题
            this.Text = ReportTitle;
            this.lblReportTitle.Text = ReportTitle;

            this.chartPie.Series.Clear();
            this.chartBar.Series.Clear();

            string where = GetConditionSql();
            dt = BLLFactory<ItemDetail>.Instance.GetReportData(FieldName, where);

            this.gridControl1.DataSource = dt;

            if (dt != null && dt.Rows.Count > 0)
            {
                this.chartPie.DataSource = dt;

                Series pieSeries = CreateSeries(dt, DevExpress.XtraCharts.ViewType.Pie3D, NumericFormat.Percent);
                chartPie.Series.Add(pieSeries);
                chartPie.Legend.Visible = true;

                PieSeriesLabel label = pieSeries.Label as PieSeriesLabel;
                ((PiePointOptions)label.PointOptions).PercentOptions.PercentageAccuracy = 4;
                ((PiePointOptions)label.PointOptions).PercentOptions.ValueAsPercent = true;

                label.Position = PieSeriesLabelPosition.TwoColumns; //设置饼图上lable的显示方式,此方式将独立出一个列显示lable
                (pieSeries.View as DevExpress.XtraCharts.Pie3DSeriesView).ExplodeMode = PieExplodeMode.All; //突出显示饼块
                (pieSeries.View as DevExpress.XtraCharts.Pie3DSeriesView).ExplodedDistancePercentage = 5;
                //(pieSeries.View as DevExpress.XtraCharts.PieSeriesView).RuntimeExploding = true; //设置了他,你就可以把你喜欢的饼块拖出来。。。

                this.chartBar.DataSource = dt;
                chartBar.Series.Add(CreateSeries(dt, DevExpress.XtraCharts.ViewType.Bar, NumericFormat.General));
                chartBar.Legend.Visible = false;
                chartBar.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
            }

            this.xtraTabControl1.SelectedTabPageIndex = 0;
        }

个中我们注意到,创建图表的Series对象的措施,我进行了一发的包裹。

Series pieSeries = CreateSeries(dt, DevExpress.XtraCharts.ViewType.Pie3D, NumericFormat.Percent);

里头CreateSeries方法代码如下所示。

        /// <summary>
        /// 创建图表的Series对象,可以指定相应的类型
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="viewType">图表类型,如DevExpress.XtraCharts.ViewType.Pie3D,DevExpress.XtraCharts.ViewType.Bar</param>
        /// <param name="format">显示格式,如百分比NumericFormat.Percent,NumericFormat.General</param>
        /// <returns></returns>
        private Series CreateSeries(DataTable dt, DevExpress.XtraCharts.ViewType viewType, NumericFormat format)
        {
            Series series = new Series("Serices1 ", viewType);
            series.DataSource = dt;
            series.ArgumentScaleType = ScaleType.Qualitative;
            series.ArgumentDataMember = "argument";
            series.ValueScaleType = ScaleType.Numerical;
            series.ValueDataMembers.AddRange(new string[] { "datavalue" });
            series.PointOptions.PointView = PointView.ArgumentAndValues;
            series.PointOptions.ValueNumericOptions.Format = format;
            if (format == NumericFormat.Number)
            {
                //series.PointOptions.ValueNumericOptions.Precision = 0;
            }

            series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签

            return series;
        }

 

在Winform开发框架中,我准备对备件仓库着不同品类的装备进行一个库存统计,也得了当时档的图如下所示。

新普金娱乐 6

 

尽Winform开发框架,提供了多科普业务体系提供的职能,包括Excel数据导入导出,能快速导入自定义模块的Excel数据,快速导出列表数据;自定义Excel自定义模板报表的变通,生成各种复杂的Excel报表;强大通用的统计图表模块,数据统计还便民;基于多数论的数查询模块和通用高级查询模块,查询数据重复有益于;框架提供依据多种数据库(Sqlserver/Oracle/Mysql/Sqlite/Access)的成,能够手动配置数据库类型,通用模块内置支持多数据库切换;框架提供了可观封装的数量访问基类,开发代码更不见还迅速;框架界面基类也进行联合封装,使用还便民,效果还统一;框架提供基础性的支持,包括合并登陆、闪屏、托盘功能,以及为插件模块提供登陆用户信息及体系信息。

2、动态项目统计图表模块

偶然,我们对表里面的多少,可能使针对性不同类别的始末展开动态的统计,以确定他们分别的比重情况,那么这些动态项目之统计图表就较适宜了,例如,对于病人资料之军事管制,我们可能需要统计各种病种所占有的百分比要各种事情门类的犯病率,这些不太确定的统计项目,就用一个能支持动态项目的统计图表进行支持,对于本Winform框架,为了较好表现是项目报表的意思,我选择了针对性备件类所占用的比重进行一个统计分析,得到下面的统计图表,如下所示。

新普金娱乐 7

地方的图形统计,除了会冲一些准绳进行限查询范围外,还好对有些预设的统计字段进行动态选取,然后根据字段里面的各种内容(统计项目)进行统计,这样便得较中的统计出各种类型的数值及比例了。

动态项目的统计,主要是对两样字段,以及对应不同字段的内容开展一个标准化分析,把她的统计数字构造一个数额表格即可进行合理呈现,如下部门代码所示。

                string fieldName = fieldItem.Value;
                int totalCount = BLLFactory<ItemDetail>.Instance.GetRecordCount(where);//计算总人数
                foreach (string searchItem in this.lstItems.Items)
                {
                    string condition = string.Format("{0} like '%{1}%' ", fieldName, searchItem);
                    if (!string.IsNullOrEmpty(where))
                    {
                        condition += string.Format(" AND {0}", where);
                    }

                    int countValue = BLLFactory<ItemDetail>.Instance.GetRecordCount(condition);//计算总人数
                    countRepeat += countValue;

                    row = dt.NewRow();
                    row[0] = searchItem;
                    row[1] = countValue;
                    dt.Rows.Add(row);
                }

 

Winform开发框架的重要功用概览如下图所示。

3、多更坐标对比统计图表模块

奇迹我们或许要对某年各个月份的数值进行比统计,已看到各种统计项目之发展趋势或者比效果,这便要求得对几近卖数据开展统一展现,这种在图展现着得动用多再坐标对比的统计图表模块进行展现,如本人上篇随笔《DevExpress控件使用的多还坐标图形的绘图》就针对立即类的图纸统计进行了比较细致的剖析及说明,相关的效用图如下所示。

新普金娱乐 8

当Winform框架之中,可以本着有一样年各月份的出入库数量进行一个分析,得到下面的统计图。

新普金娱乐 9

以上数据未多,展现可能无太尴尬,下面我于出己任何一个软件系统的界面,其中针对患者的出入院记录进行一个统计对比分析,统计报表如下所示。

新普金娱乐 10

新普金娱乐 11

4、打印及导出报表

众时节,我们也许用针对表现的表格进行一个打印及导出操作,对于DevExpress的ChartControl控件,打印操作十分简单,你甚至足以据此一行代码进行打印操作。

this.chartControl1.ShowPrintPreview(DevExpress.XtraCharts.Printing.PrintSizeMode.Zoom);

要多又扑朔迷离的定制操作,代码如下所示。

        private void btnPrint_Click(object sender, EventArgs e)
        {
            //this.chartControl1.ShowPrintPreview(DevExpress.XtraCharts.Printing.PrintSizeMode.Zoom);
            DevExpress.XtraPrintingLinks.CompositeLink compositeLink = new DevExpress.XtraPrintingLinks.CompositeLink();
            DevExpress.XtraPrinting.PrintingSystem ps = new DevExpress.XtraPrinting.PrintingSystem();

            compositeLink.PrintingSystem = ps;
            compositeLink.Landscape = true;
            compositeLink.PaperKind = System.Drawing.Printing.PaperKind.A4;

            DevExpress.XtraPrinting.PrintableComponentLink link = new DevExpress.XtraPrinting.PrintableComponentLink(ps);
            ps.PageSettings.Landscape = true;
            link.Component = this.chartControl1;
            compositeLink.Links.Add(link);

            link.CreateDocument();  //建立文档
            ps.PreviewFormEx.Show();//进行预览
        }

于导出报表,我们
一般要求图文并茂,纯粹导出图表的图形或列表,都是同一项大粗略的事情,但是要管它们组成并,并拓展合理的排版,这需要费一点想法才会做好。

先是我们来介绍一下,一般图表控件都生导出Image图片类型的操作,DevExpress控件也无差,它的操作代码如下所示。

                    //插入图片到Excel里面
                    using (MemoryStream stream = new MemoryStream())
                    {
                        stream.Position = 0;
                        ChartControl chart = (ChartControl)chartControl1.Clone();
                        chart.Size = new Size(800, 400);

                        chart.ExportToImage(stream, ImageFormat.Jpeg);
                        //进行存储操作
                        //worksheet.Pictures.Add(startRow, 0, stream);
                    }

为重新好之成几只图表和数据报表,我们这里运用了Aspose.Cell控件进行代码操作,把这些图动态构成及一个Excel文档里面进行导出,全部代码如下所示。

        private void btnExport_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable dt = this.gridControl1.DataSource as DataTable;
                if (dt == null || dt.Rows.Count == 0)
                {
                    MessageDxUtil.ShowTips("没有数据需要导出!");
                    return;
                }

                string saveDocFile = FileDialogHelper.SaveExcel(string.Format("{0}.xls", ReportTitle), "C:\\");
                if (!string.IsNullOrEmpty(saveDocFile))
                {
                    Workbook workbook = new Workbook();
                    Worksheet worksheet = workbook.Worksheets[0];
                    worksheet.PageSetup.Orientation = PageOrientationType.Landscape;//横向打印
                    worksheet.PageSetup.Zoom = 100;//以100%的缩放模式打开
                    worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;

                    #region 表头及说明信息
                    Range range; Cell cell; string content;
                    int colSpan = 3;
                    range = worksheet.Cells.CreateRange(0, 0, 1, colSpan);
                    range.Merge();
                    range.RowHeight = 20;
                    range.Style = CreateTitleStyle(workbook);
                    cell = range[0, 0];
                    cell.PutValue(ReportTitle);

                    range = worksheet.Cells.CreateRange(1, 0, 1, colSpan);
                    range.Merge();
                    range.RowHeight = 15;
                    cell = range[0, 0];
                    content = string.Format("统计报表详细列表如下:");
                    cell.PutValue(content);

                    #endregion

                    #region 生成报表头部表格
                    Style headStyle = CreateStyle(workbook, true);
                    Style normalStyle = CreateStyle(workbook, false);
                    int startRow = 2;
                    int startCol = 0;

                    int index = 0;
                    foreach (DataColumn col in dt.Columns)
                    {
                        range = worksheet.Cells.CreateRange(startRow, index, 2, 1);
                        range.Merge();
                        range.Style = headStyle;
                        cell = range[0, 0];
                        cell.PutValue(col.ColumnName);
                        cell.Style = headStyle;
                        index++;
                    }

                    #endregion

                    //写入数据到Excel
                    startRow = startRow + 2;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        startCol = 0;
                        for (int j = 0; j < dt.Columns.Count; j++)
                        {
                            DataRow dr = dt.Rows[i];
                            cell = worksheet.Cells[startRow, startCol];
                            cell.PutValue(dr[j]);
                            cell.Style = normalStyle;

                            startCol++;
                        }
                        startRow++;
                    }

                    //写入图注
                    startRow += 1;//跳过1行
                    range = worksheet.Cells.CreateRange(startRow++, 0, 1, colSpan);
                    range.Merge();
                    range.RowHeight = 15;
                    cell = range[0, 0];
                    cell.PutValue("以曲线图展示如下:");

                    //插入图片到Excel里面
                    using (MemoryStream stream = new MemoryStream())
                    {
                        stream.Position = 0;
                        ChartControl chart = (ChartControl)chartControl1.Clone();
                        chart.Size = new Size(800, 400);

                        chart.ExportToImage(stream, ImageFormat.Jpeg);
                        worksheet.Pictures.Add(startRow, 0, stream);
                    }

                    workbook.Save(saveDocFile);
                    if (MessageUtil.ShowYesNoAndTips("保存成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes)
                    {
                        System.Diagnostics.Process.Start(saveDocFile);
                    }
                }
            }
            catch (Exception ex)
            {
                LogTextHelper.Error(ex);
                MessageUtil.ShowError(ex.Message);
                return;
            }
        }

导出Excel的力量如下所示。

新普金娱乐 12

1、支持插件化应用开发,能够动态配置和加载开发之插件

框架实现基于插件化的使,如下所示。

新普金娱乐 13新普金娱乐 14

支持插件化应用的出框架能叫程序带来无限的精力,也是目前无数系、程序追求的严重性趋势有,插件化的模块,在照一定之接口标准的基本功及,可以兑现高效集成,也便是所谓的热插拔操作,可以极其对曾经支付好系统进行扩展,而且免会见潜移默化都部分效益,不再要的模块,通过改动配置移除即可。

插件化应用也是时下框架和体系开发的主流趋势,从开企业之活管理角度来拘禁,第一可以把控好就有些框架产品,第二足以管内部的人口分配至不同之工作模块中,让她们按照一定之接口即可快速开,从而提高组织对业务模块的横向切割和速开之效率,更好、统一、高效完成企业化应用框架的搭建与应用。

5、整体Winform开发框架的特点介绍

脚是自己本着Winform开发框架大的端的性状开展一个整,希望会包括整个框架的一部分常用特性,较之前的图纸,增加了高档查询模块,统计图表模块等内容。希望大家批评指正。

新普金娱乐 15

 

2、菜单支持动态配置,可因用户权限进行动态控制显示

诚如Winform程序中,菜单都是一直写于主程序中之,这样于修改及保护菜单的相关消息,可能有所不便,而且对插件化应用,新增菜单是广大的作业,这样即使得对菜单进行动态配置管理了,通过后台菜单的配备以及权杖的指定,能够实现菜单的动态加载与权力验证。

故而菜单呢是权分配的同组成部分,为了实用管理菜单资源,我们将菜单放到权限管理网遭到进行管理控制。

新普金娱乐 16

设定好菜单的图标和Winform窗体类型,就能于Winform框架中动态构建菜单信息了。菜单的图样放置于网的对立目录下即可。

新普金娱乐 17

新普金娱乐 18

 

3、集成各种独立开发好的模块,如权限管理网、字典管理模块等,自动更新模块等

 3.1 权限管理模块

权力的分配与管制,基本上是每个业务体系要考虑的东西,而这些常用的事物,在全方位Winform开发框架中,把她看成一个独立的模块,既利维护管理,也留下有接口非常容易进行合并,这样会以档次遭到屡进行利用。

权力系统要考虑的系用户、组织单位、角色、权限定义及分配、菜单管理、用户登录日志等相关消息。对于每新增一个系,我们就需要在权力管理体系被长一个网类型定义,以及有关的力量、菜单数据即可,非常方便管理。

新普金娱乐 19

3.2 字典管理模块

除此以外,除了权力的保管,字典管理吗是正规工作模块的一个说到底要效益,因此字典管理模块于Winform开发框架中,也是一个单独的模块进行开发管理,在应用的上进行集成即可。

字典的归类可以随多级进行分类管理,可以拖拉进入新的归类,非常方便。

新普金娱乐 20

3.3 自动更新模块

相似情况下,为了实用管理应用程序的揭示与创新,我们用软件支持远程自动更新功能;在Winform开发框架中还引入一个活动升级翻新的通用模块,这个活动升级之通用模块除了有一般的功用外,可以透过配备程序标题、升级路线方法相当方式,实现通用化的升迁操作,其他急需升级之先后,拿过来就是足以下,经过项目之三结合及优化,已经持有比较好的使用前景了。

以通用自动更新模块具有下几乎独特征:

1)程序标题可部署,更新路径而配置,适用于各种需要更新的品种做。

2)支持文件复制或者对打折扣包进行解压,适合再多琐碎程序集的圆提升。

3)支持文件更新后活动启动,或者带参数的启动方式。

新普金娱乐 21

4、可重复使用的网基础模块,Winform分页控件和.NET开发公用类库等

4.1 Winform分页控件

为提高多少的拿走与展示效率,一般景象下,我们还需要针对数码开展分页获取与展示,在网络化环境,这种方式获取数据特别重要性,在Winform里面,没有成的分页控件可以运用,因此出于这考虑,把数据展示、数据导出、数据打印等居多作用集成一起,更加方便使用。分页控件完美支持列表数据的分页,可以调动显示列及顺序,是否出示复选框,字段别名,奇偶列的颜色变化,列信息提示和多少复制等等众多实用细致的力量的。

列表的数目绑定及展示代码,通过代码生成工具,可以一键生成所待的界面代码,开发效率飞一般的晋升。

新普金娱乐 22

新普金娱乐 23  

4.2 .NET公用类库

俗话说,一个烈士十独帮扶,众人拾柴火焰高等都证实一个道理,有重新多之资源,更丰富的积,都是扶持你走向成功,走向极端的推动力。就我们开发者而言,其中技术的累积、资源的累积,就是类似一个个烈士、一干净根好柴,是咱能进行快捷开发的保跟推动力。

这些类库是本身事多年软件开发,逐渐提炼和发现的组成部分闪光点或者好有,有些是接到别人的理想之事物,有些是协调逐渐提炼的精粹,以前,在网络直达看部分开源的类型,总会先瞧该是否有包装好、功能独立的帮忙类库,发现好之增援类库,总是乐呵呵若狂好巡,学习中日益积累,研究被逐渐提炼,多年了后,略有小成,终乎今天所介绍的援类库集合。这些帮类库平时呢并无是有着的还见面用得上,不过有常用之,几乎各个档次即使会见用到,类库涉及面非常普遍,能够为咱开节省成千上万日子,并且我们为堪因自己之得展开扩张到,形成好的类库集合。

博客公用类库在线帮助文档列表:

 厚积薄发,丰富的公用类库积累,助你快速开展系统出(1)—-开篇总结
 厚积薄发,丰富的公用类库积累,助你快速开展系统出(2)—-常用操作
 厚积薄发,丰富的公用类库积累,助你飞开展系统出(3)—-数据库相关操作
 厚积薄发,丰富的公用类库积累,助你飞开展系统开发(4)—-CSV、Excel、INI文件、独立存储等文件有关
 厚积薄发,丰富的公用类库积累,助你飞开展系统出(5)—-热键、多线程、窗体动画冻结等窗体操作
 厚积薄发,丰富的公用类库积累,助你快速开展系统开发(6)—-全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等
 厚积薄发,丰富的公用类库积累,助你快开展系统出(7)—–声音播放、硬件信息、键盘模拟和钩子、鼠标模拟和钩子等装备相关
 厚积薄发,丰富的公用类库积累,助你飞开展系统开发(8)—-非对如加密、BASE64加密、MD5等常用加密处理 
 厚积薄发,丰富的公用类库积累,助你飞开展系统出(9)—-各种常用辅助类
 厚积薄发,丰富的公用类库积累,助你飞开展系统出(10)—各种线程同步的集合类
 厚积薄发,丰富的公用类库积累,助你飞开展系统开发(11)—各种线程相关操作类
 厚积薄发,丰富的公用类库积累,助你速开展系统开发(12)—
网络有关操作辅助类

5、代码生成工具Database2Sharp的结合

全部框架通过跟代码生成工具Database2Sharp进行配合,能够一键别整体性框架代码,Winform系统界面代码,开发再快速。

新普金娱乐 24

于方方面面Winform开发框架中,Database2Sharp生成出来的代码体现了非常周到的整合性,能够无缝对接抱开发的框架体系遭到,无论是常规的政工逻辑和数目访问层代码,以及部分列表、编辑界面的Winform界面代码,都能迅速转移,稍作调整即可满足工作模块的用。

Database2Sharp是一个大概点击几不行鼠标就能够形成同样完善代码量的代码生成工具,效率惊人、友好体贴,真正的出好伙伴。提供了针对性SqlServer
2000、SqlServer
2005、Oracle、Mysql、Access、SQLite的支持;可以转变各种架构代码、Winform界面代码,并且和Winform开发框架全面组合,体现出还胜似之开支效率。

新普金娱乐 25

6、通用的Excel数据导入导出,能快导入自定义模块的Excel数据,快速导出列表数据

鉴于一般的事体系统,经常性的数据导入时十分健康的工作需要,因为毕竟使用Excel来操作数据也杀有利,或者出于系统内的数据交换需要,我们得提供一个入口被客户导入所用之多少。但是导入数据的时节,不同的作业数据对应不同之Excel文件,很麻烦形成统一,但倘若是每个事情模型,都创一个不比之导入界面来操作Excel数据,又见面觉得说不定某种程度上重复劳动,增加支出和保障本。

这就是说闹管一致种植在两者之间的方,来贯彻效率的无比优化,并且会联合以好一个导入的界面也,在支付世界,只要会想到的,一般为克就,由于工作之待,在自我的Winform开发框架惨遭引入了一个通用的数据导入模块,来实现这既是统一,又是别之事体需求。Winform框架提供的独通用的Excel数据导入导出机制,通过代码生成工具Database2Sharp自动生成的代码,就隐含了怎样运用这通用导入模块的系代码和该模块的导出数据的代码,我们若举行的哪怕是于系统运转起来,导出一些数量作为某模块的Excel模板即可。下面的效力按钮就是利用代码生成工具自动生成的界面包含的按钮。

新普金娱乐 26

通用数据导入功能,包含下面几乎个点的内容。

新普金娱乐 27

脚就是一个实际上变化的功能模块,其导入界面的周转效果。

新普金娱乐 28

以极度的的状态栏里面,但咱保留数据的时段,会调用后台线程进行数量保存,并展示数据导入的速状态,由于是采用后台线程处理,不会见卡住时的界面,在多文档的Winform开发框架界面被,可以切换到另外事情界面进行其它处理,不影响总体界面操作。

7、自定义Excel自定义模板报表的转移,生成各种繁复的Excel报表

诸多情形下,我们用扭转于专业的Excel模块,因此于定义模板报表就是同样种异常好之方案,Winform开发框架提供了又从定义Excel报表的转变。

新普金娱乐 29

用普通的二维表,虽然会满足大多数底景况,不过在相似的事务中,自定义模板的表格根据贴近实际,符合客户之要求,虽然于定义模板的表格,比普通的二维报表复杂一些,不过使用Apose.Cell控件,并当预设模板被预设变量,可以生成那个复杂的报表。

具体的自定义模板报表可以参照下自家总的简单篇稿子。

用Aspose.Cell控件实现Excel高难度报表的浮动(一)

使Aspose.Cell控件实现Excel高难度报表的变更(二)

比如生成一个业内的出库单,这个表单有表头信息,列表数据信息,并非一个一般的二维表,而且这种格式比较稳定,因此十分抱由定义模块报表的生成操作。

新普金娱乐 30  

 其他计划模板如下所示:

 

新普金娱乐 31 

事实上变化的表如下所示:

新普金娱乐 32

8、强大通用的统计图表模块,数据统计还有利

统计图表在过剩类还或为此到,集成及框架中,更便宜大家对部分图项目之筹划理解和成效的录用。在形似的风俗的框架中,可以采取ZedGraph开源控件或者微软起带的MSChart进行图纸设计,DevExpress控件套件有温馨的图样控件,这里要介绍因DevExpress控件的图片控件进行图片设计。

8.1 普通统计图表

此间依的日常统计图表,只是针对表某一列展开单一的统计,可以从饼状图、柱状图的图样中反映这些项目各自所占的百分比以及反复价值,在Winform框架中之常见统计图表模块中,包括了饼状图、柱状图跟数码表格,这样还有利于对数码进行完美的解析以及查看。整个模块是可以用的,指定字段属性就足以比较客观之展现出无与分类项目的统计功能了,具体成效图如下所示。

新普金娱乐 33

上面的统计图表中,还富含了底两独功能模块新普金娱乐,如下所示。

新普金娱乐 34

新普金娱乐 35

8.2 动态项目统计图表

偶,对于表里面的多少,可能使针对性不同类型的情展开动态的统计,以确定他们分别的比重情况,那么这些动态项目之统计图表就较适宜了,例如,对于病人资料之管理,可能得统计各种病种所占有的比例要各种事情门类的犯病率,这些不太确定的统计项目,就得一个能支持动态项目的统计图表进行支持,对于本Winform框架,为了较好表现是项目报表的意思,我选了针对性备件类所占有的比重进行一个统计分析,得到下面的统计图表,如下所示。

新普金娱乐 36

方的图片统计,除了会冲一些准进行限查询范围外,还可以对有预设的统计字段进行动态选取,然后根据字段里面的各种内容(统计项目)进行统计,这样便好较可行之统计出各种类型的数值及比重了。

8.3 多重新坐标对比统计图表模块

当Winform框架内,可以针对某个平年各月份的出入库数量进行一个剖析,得到下面的统计图。

新普金娱乐 37

如上数据未多,展现可能未顶为难,下面我给出自我其他一个软件系统的界面,其中对患儿的出入院记录进行一个统计对比分析,统计报表如下所示。

新普金娱乐 38

9、基于多数据库的多寡查询模块和通用高级查询模块,查询数据还便民

每当自之Winform开发框架中,使用了一个询问辅助类SearchCondition来兑现查询条件的落和转化,这个辅助类内置了针对性强数据库条件的分析处理,因此能够充分好别所要之数目查询条件,正确高效获取所用的数码开展亮。

        /// <summary>
        /// 根据查询条件构造查询语句
        /// </summary> 
        private string GetConditionSql()
        {
            //如果存在高级查询对象信息,则使用高级查询条件,否则使用主表条件查询
            SearchCondition condition = advanceCondition;
            if (condition == null)
            {
                condition = new SearchCondition();
                condition.AddCondition("ItemName", this.txtName.Text, SqlOperator.Like)
                    .AddCondition("ItemBigType", this.txtBigType.Text, SqlOperator.Like)
                    .AddCondition("ItemType", this.txtItemType.Text, SqlOperator.Like)
                    .AddCondition("Specification", this.cmbSpecNumber.Text, SqlOperator.Like)
                    .AddCondition("MapNo", this.txtMapNo.Text, SqlOperator.Like)
                    .AddCondition("Material", this.txtMaterial.Text, SqlOperator.Like)
                    .AddCondition("Source", this.txtSource.Text, SqlOperator.Like)
                    .AddCondition("Note", this.txtNote.Text, SqlOperator.Like)
                    .AddCondition("Manufacture", this.txtManufacture.Text, SqlOperator.Like)
                    .AddCondition("ItemNo", this.txtItemNo.Text, SqlOperator.LikeStartAt)
                    .AddCondition("WareHouse", this.txtWareHouse.Text, SqlOperator.Like)
                    .AddCondition("Dept", this.txtDept.Text, SqlOperator.Like)
                    .AddCondition("UsagePos", this.txtUsagePos.Text, SqlOperator.Like)
                    .AddCondition("StoragePos", this.txtStoragePos.Text, SqlOperator.Like);
            }
            string where = condition.BuildConditionSql().Replace("Where", "");
            return where;
        }

    /// <summary>
    /// Sql的查询符号
    /// </summary>
    public enum SqlOperator
    {
        [Description("Like 模糊查询")]
        Like,

        [Description("Not LiKE 模糊查询")]
        NotLike,

        [Description("Like 开始匹配模糊查询,如Like 'ABC%'")]
        LikeStartAt,

        [Description("= 等于号")]
        Equal,

        [Description("<> (≠) 不等于号")]
        NotEqual,

        /// <summary>
        /// > 大于号
        /// </summary>
        [Description("> 大于号")]
        MoreThan,

        [Description("<小于号")]
        LessThan,

        [Description("≥大于或等于号 ")]
        MoreThanOrEqual,

        [Description("≤ 小于或等于号")]
        LessThanOrEqual,

        [Description("在某个字符串值中")]
        In
    }

另外,一个好之数量查询
,一般有一个精的尖端查询模块,这个模块于多先后中还深广泛,也是于客户扩大查询的一个不行好的续,由于自身一直梦想自己的Winform开发框架能够改善,所以做了之通用高级查询模块,希望对以后自家自己拥有的花色与框架本身,都能够快的以。

新普金娱乐 39

 在介绍输入条件的上,我们注意到,查询输入,基本上可以分为几近乎:其一是例行的文本类,使用文本框替代即可;其二是下拉列表类型,用户从列表下面选择内容;其三是日期类型,需要用户指定开始日期以及得了日期;其四是数字型,需要用户指定起始与终止之数值。

1)常规的文本类标准输入界面:

新普金娱乐 40

2) 下拉列表类型条件输入界面:

新普金娱乐 41

3) 日期类型标准输入界面:

新普金娱乐 42

4) 数字型标准输入界面:

新普金娱乐 43

10、框架提供基于多种数据库(Sqlserver/Oracle/Mysql/Sqlite/Access)的结

则咱于实质上项目面临,一般采用同样种数据库进行处理,但是差之种,采用的数据库类型或者不同,本Winform开发框架为便于演示与扩张的内需,内置支持了Sqlserver/Oracle/Mysql/Sqlite/Access,更多之数据库,也得经过扩大数据库访问基类的法子开展双重多数据库的支撑。

Winform开发框架内的富有模块,如用到了数据存储的,如权限管理管理模块、通用数据字典管理模块,均放置支持就几乎栽数据库的构成支持。整个Winform开发框架的数据库访问,能够手动配置数据库类型,对于同样种数据库,也可将数据存储分开储存,如工作数据存储在一个数据库,权限管理控制存储于另外一个数据库这种措施。

新普金娱乐 44

Winform开发框架提供多数据库支持,数据访问基类依然十分简单,因为咱们运用的数据库访问模块是EnterpriseLibrary,把数据库抽象化,并且我拿具有数据库通用操作放在了一个最佳基类上,具体的数据库基类只待贯彻转之组成部分即可。业务访问类则采用泛型进行打包处理。

故而,Winform开发框架提供了高度封装的数目访问基类,开发代码更少还敏捷。

11、框架界面基类也展开统一封装,使用还有益于,效果还统一

以重新好开发常因此界面模块,Winform开发框架将部分公用的界面模块,统一放置在了一个BaseUI的档次蒙,把内部的通用高级查询、通用数据导入模块、常见处理界面基类,插件接口等模块放在一起,根据易于管理与用。这样开发之模块,重用很多好端端的界面,开发效率还快,使用更方便,效果更统一了。

新普金娱乐 45

12、框架提供基础性的支撑,包括合并登陆、闪屏、托盘功能,以及为插件模块提供登陆用户信息与系信息

成套Winform开发框架,是起一个框架启动模块进行集中处理的,系统启动后,用户登录处理后,通过动态加载菜单和插件模块,并于关键性框架界面中进行展示,提供权限决定及登录用户信息等地方的框架支持。另外框架支持闪屏图片的动态配置,系统激活热键和托盘缩小灯功能。

新普金娱乐 46

由于系统登录后,框架本身蕴藏了用户登录以及权力信息,框架动态加载某个模块后,会将用户信息与权杖控制信息,注入到模块的界面基类中,因此插件的界面模块只要是继续了BaseUI的界面基类,就能得到到用户信息及权限决定信息了。

特色总结

Winform框架,本身就是是为了能够高效开一个迅速、稳定、美观大方、扩展性强的行使软件系统。因此自以温馨十年左右的共享软件开发生涯和店堂项目开中,不断揣摩,精雕细琢,对广大首要的风味都进行了概括和提高,吸收项目面临好之闪光点,借鉴一些吓的软件开发思路,力求将软件做的再度好;在付出效率方面,除了支付有常规通用的模块、在模块内部又充分考虑继承、重用的条条框框,还针对性大幅度提高效率的代码生成工具,根据Winform开发框架的兑现思路与特点,进行了周优化,使得无论在事情代码生成,还是以界面代码生成方面,均能把开发效率达到最致,希望全体Winform开发框架能够不断发挥它的魅力以及吸引力,为还多的口带希望,体验出之趣。

相关文章