Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

  最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效。

在很多程序模块中都很常见,也是给客户扩展查询的一个很好的补充,由于我一直希望我的Winform开发框架能够精益求精,所以做了这个模块,希望对今后我自己所有的项目以及框架本身,都能高效的使用。

1、通用高级查询模块的用途及介绍

  既然称之为通用查询模块,那么他就不能与具体的表字段有耦合关系,但是要实现具体的查询,必须通过某种方式进行属性传递,实现更直观友好的字段查询功能。高级查询模块,在很多完善的程序上都会提供,用于满足用户对特定的字段,添加特定的条件进行,因为一般情况下,由于版面的限制界面上查询的内容比较有限,只是把一些很常见、重要的字段作为查询输入,如果表字段比较多,那么对有些特殊的字段就无所适从。

如这个程序来讲 字段信息比较少不明显. 做为常用查询的字段一般情况下是不能太多字段的,因为那样页面显示的就会臃肿的难看。

我的高级查询查询模块也是基于这个道理,因此,在主界面增加一个高级查询按钮入口,如上图所示,单击后,显示一个所有字段的列表,如下界面。

看到上面这样是不是即熟悉又新其呢,新奇是因为以往做的高级查询是一个表格第一列是标题,第二行是输入的值再进行转换。而我这次做的是模仿用友的U9产品做的查询方案。即满足对高级查询的需要又扩展了查询方案进行保存。

在介绍输入条件的时候,我们注意到,查询输入,基本上可以分为几类:其一是常规的文本类型,使用文本框控件;其二是表格翻译的列就采取了下拉列表控件进行展现;其三是日期类型,需要用户指定开始日期和结束日期,也就用了自定义日期范围控件(为了方便,都可以单独输入其中的一部分作为条件进行高级查询。);其四是数字类型,也是采用的文本框进行格式化,为什么不用范围而是可以选择查询的符号,这也是与其它人做高级查询的不同之处。其五,复选框我们也做了处理。

查询后会保留用户的输入,第二次打开界面后,会加载之前的输入条件,这样比较人性化一些。同时可以保存查询方案,供下次登录系统选择查询方案就可以带出当时查询的条件,再次查询使用。另可以把查询方案共享给其它人,也可以只自己能看到。

2、通用高级查询模块的实现思路

有很多人做的时候就根据表结构或者视图结构来做的,这样就会有一个限制就是在查询时用的不是表和视图,而是多表关联查询,高级查询的字段就会不全了,另原因表的字段很多不一定全部作为查询条件。

我为了使用更简单更方便而我采取了从显示的内容来获取查询的字段进行处理。

这样调用起来就很非常的简单,一行代码就搞定了。

  string whereSql = this.ShowAdvancedQuery(this.grvGridView);

1.用传过来的gridView进行解析每一列使用的控件情况。

private void ShowQueryControl()
        {
            foreach (GridColumn gridColumn in GridView.Columns)
            {
                string fieldName = gridColumn.FieldName;
                if (!fieldName.Equals(BusinessLogic.SelectedColumn))
                {
                    string name = gridColumn.Caption;
                    Type type = gridColumn.ColumnType;
                    。。。。。。。。。。
               }
           }
       }    

2.在上面解析查询字段和控件的时候还需要查询的符号

#region 符号下拉列表
        int txtNotationWidth = 90;
        private ImageComboBoxEdit GetNotationImageComboBoxEdit(string fieldName)
        {
            ImageComboBoxEdit comboBox = BaseInterfaceLogic.CreateImageComboBoxEdit("cmbNotation" + fieldName, null, null, txtNotationWidth, "Notation");//
            comboBox.Properties.Items.Clear();
            comboBox.Properties.Items.Add(new ImageComboBoxItem("包含", "Like"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("不包含", "NotLike"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("左包含", "StartWith"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("右包含", "EndWith"));

            comboBox.Properties.Items.Add(new ImageComboBoxItem("等于", "Equal"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("不等于", "NotEqual"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("大于", "Greater"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("小于", "Less"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("大于等于", "GreaterEqual"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("小于等于", "LessEqual"));
            comboBox.Properties.Items.Add(new ImageComboBoxItem("时间范围", "DateRange"));

            //comboBox.Properties.Items.Add(new ImageComboBoxItem("空", "Null"));
            //comboBox.Properties.Items.Add(new ImageComboBoxItem("非空", "NotNull"));
            //comboBox.Properties.Items.Add(new ImageComboBoxItem("两者之间", "Between"));
            comboBox.SelectedIndex = 0;
            return comboBox;
        }
        #endregion

3.显示完成后,点击查询后需要从页面控件进行反解析处理

下面是反解析条件的关键代码。

foreach (Control control in scrollableControlQuery.Controls)
            {
                if (control is FlowLayoutPanel)
                {
                    panel = (FlowLayoutPanel)control;
                    foreach (Control childControl in panel.Controls)
                    {
                        //05.普通下拉框
                        if (childControl is ImageComboBoxEdit)
                        {}
                    }
                }
          }

4. 和普通查询功能并存

为了使得传统查询按钮,和高级查询能够并存,我们需要存储一个高级查询的查询对象,但传统查询的时候,我们把高级查询对象设置为空即可屏蔽高级查询的条件了。

在上面代码也可以看到,查询方案点击查询后只会返回组装好的sql条件给了 public string QueryWhere = string.Empty;属性。之后想要怎么使用就是程序说的算了。使我们的程序能够尽量满足客户的需求,获得更加好的反馈和支持了。

项目中使用完整代码如下:

 #region 高级查询事件处理
        /// <summary>
        /// 高级查询事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSearchA_Click(object sender, EventArgs e)
        {
            string whereSql = this.ShowAdvancedQuery(this.grvGridView);
            if (!whereSql.Equals(ShowAdvancedQueryCancel))
            {
                this.Search(whereSql);
            }

        }
        #endregion

从上面来看,其实我这次做的高级查询在行业内是比较简单实用的。而且还增加了查询方案进行存储。也算是行内比较标准的做法了。其它人可以进行效仿了。

当然这个查询方案还不满足于现在的功能,之后还要扩展排序规则和显示的栏目控制。

-------------------------------------------------------------------------------------------

作者: 王春天 2015-10-21作者Blog:http://www.cnblogs.com/spring_wang
出处: http://www.cnblogs.com/spring_wang/p/4874584.html

如果觉得还不错,欢迎转载。

SNF快速开发平台框架的系列文章:

Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework

Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework(

Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework

SNFAutoupdater通用自动升级组件V2.0-WinForm

SNF快速开发平台3.2之--.Net可扩展的单据编号生成器-SNF.CodeRule

SNF快速开发平台3.1之--审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow

SNF快速开发平台3.1之--审核流(2)流程设计-SNF.WorkFlow功能使用说明

SNF快速开发平台3.1之--审核流(1)SNF.WorkFlow审核流简介

SNF快速开发平台3.0之--完美的代码生成器SNF.CodeGenerator-快速开发者的利器

基于MVC4+EasyUI的Web开发框架--Spring.Net.FrameworkV3.0总体介绍

SNF快速开发平台3.0之--MVC 打印解决方案

SNF快速开发平台3.0之--文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)

SNF快速开发平台3.0之--asp.net mvc4 强大的导出和不需要上传文件的批量导入EXCEL

SNF快速开发平台3.0之MVC通用控件库展示-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI +Knockout

SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

SNF快速开发平台3.0之-CS页面-Asp.net+Spring.Net.Framework

SNF快速开发平台3.0之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者

时间: 2024-08-04 13:49:58

Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework的相关文章

SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Load事件或者Program入口的Main方法第一行代码加上如下代码: 注意:是主程序的 Load事件要加上调整自动更新程序的代码.要以模式打开窗口.如果没有差异会自动关闭升级窗口显示主窗口. 3.把下面目录里的文件拷贝到 应用程序的同级目录下: 4.配置WINFORMS应用程序目录下Updateli

MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台

03.SQL高级查询_分组: 1).需求:一条查询,查询出每种商品的最高价格 2).分组的命令:group by 分组字段 3).实现上例: select category_id,max(price)  from product group by category_id; 查询顺序:先分组,再聚合 4).注意事项: 分组查询的结果最多只能包含:分组列,聚合结果,不能包含其他字段. 5).练习1: 需求:查询每个生产日期的商品的数量是多少? select  proDate,count(*)  fr

SNF开发平台WinForm之十三-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void UCTimeAxisData() { //增加节点 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); list.Add(new KeyValueP

SNF开发平台WinForm之九-代码生成器使用说明-SNF快速开发平台3.3-Spring.Net.Framework

下面就具体的使用说明: 1.获取代码生成器的授权码(根据本机)-----还原数据库-------改config-----代码生成器 改代码生成器Config 2.登录代码生成器 3.查看是否连接成功 4.配置参数 下图,可在字段右键选择控件编码字段,控件名称字段 5.生成代码 6.启动程序 这个系列教程文档,欢迎转载: SNF开发平台WinForm之十-Excel导入http://www.cnblogs.com/spring_wang/p/6128604.html SNF开发平台WinForm之

SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework

7.1运行效果: 2.Excel导入开发实现 2.1. 创建窗体,修改命名空间 新增的窗体命名“FrmImport表名”,这个导入窗口比较其它窗口会特殊一些,需要继承BaseFormImport父级窗体 2.2.在新建窗体中写方法 构造方法,是用来设置 导入的窗体名称,和下载导入模版名称,指定必填列. 2.3.AddItem在“导入数据”事件时会被调用,并且每一行数据转换成实体对象过来,我们可以对实体对象进行操作保存或者其它处理. 2.4.添加导入按钮 2.5.在调用按钮事件写入调用导入窗体代码

SNF快速开发平台成长史

2017年:整体不管cs还是bs都进入到了快车道 5月份升级内容: 框架组和产品组正在全力升级中. 4月份升级内容: BS框架 页面显示效果的优化 BS框架 多平台切换 BS框架 OpenApi服务 BS框架 富文本控件集成了百度开源项目 参与人员: 王金斗.王翰智 3月份升级内容: CS框架 规则引擎 BS框架 规则引擎 参与人员: 王金斗.石瑀.张晓波 2月份升级内容: 代码生成器 BS选择控件代码生成 代码生成器 支持视图代码生成 代码生成器 增加数据库连接的配置功能 1月份升级内容: C

SNF快速开发平台3.0之--MVC 打印解决方案

SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常用这个方法. 按规定要求放于指定位置:Areas->Sys->Reports->BaseRole.mrt 打开对应的页面功能,点击打印即可,也可以在线编辑报表 第一步:配置打印按钮 第二步:配置打印方法 //打印 this.printClick = function () { snf.ope

SNF快速开发平台3.1之-- SNF.WorkFlow审核流简介

本项目是的在Spring.Net.Framework 平台之上进行研发.SNF.WorkFlow审核流是一款完全自主知识产权研发的为软件项目. 审核流基本概念:什么是审核流? 审核流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务. 业务:审核流所指业务涵盖了与经营相关的活动. 串行或并行:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行:或者由不同的人或组合根据不同的情况处理,我们称之为并行. 两个或两个以上的人:如审核流的名称所表达的含义,一个人处理的业务

SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本

在之前介绍一下EasyQuery工具SNF开发平台WinForm-EasyQuery统计分析-效果-非常牛逼的报表查询工具 Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-+Spring.Net.Framework Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework 本月在此组件上增加了新的功能,就是在数据源配置那里写SQL脚本时,可