最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的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 = ;
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 = ;
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快速开发平台框架的系列文章:

SNF开发平台WinForm之五-高级查询使用说明-http://www.cnblogs.com/spring_wang/p/6116640.html

SNF开发平台WinForm之四-开发-主细表管理页面-http://www.cnblogs.com/spring_wang/p/6116626.html

SNF开发平台WinForm之三-开发-单表选择控件创建-http://www.cnblogs.com/spring_wang/p/6116592.html

SNF开发平台WinForm之二-开发-单表表单管理页面-http://www.cnblogs.com/spring_wang/p/6116572.html

SNF开发平台WinForm之一-开发-单表表格编辑管理页面-http://www.cnblogs.com/spring_wang/p/6116523.html

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之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者

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

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

    最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...

  2. SNF开发平台WinForm之五-高级查询使用说明-SNF快速开发平台3.3-Spring.Net.Framework

    5.1运行效果: 5.2开发实现: 1.按上面效果来说,先来看一下在程序当中如果调用.第一步在页面拖拽一个按钮为“高级查询”,事件上写下如下代码: 如果是单表查询的话,只需要传GridView就行,如 ...

  3. Winform开发框架之通用高级查询模块

    最近一直忙于公司的事情,虽然一直在做一些相关的技术研究,但是很久没能静下心来好好写写博客文章了,想想也有半个月之多了,这半个月来,也一直致力于改善我的WInform开发框架,使得自己及客户使用起来更加 ...

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

    9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...

  5. SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework

    6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...

  6. Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework

    今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...

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

    上一篇讲到,如何快速创建报表程序了.这篇教大家如何快速制作图表报表. 继上一篇,Winform开发框架之图表报表在线设计器-报表 上一篇讲到如何了创建数据源,这里就不在介绍了.那我们就直接从图表设计器 ...

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

    带过项目和做过项目的人都知道,在客户现场客户的需求是百般多样的,今天要查销售出库情况,明天要看整个月的各部门销售情况,后天要查全年每个客户的项目金额.一直以前都有新需求,虽然会有售后收益,但如果有一个 ...

  9. SNF开发平台WinForm之十四-站内发送系统信息-SNF快速开发平台3.3-Spring.Net.Framework

    1运行效果: 2开发实现: .组装站内信息发送实体对象. SNFService SNFService = new SNFService(); if (this.ucUser.SelectedIds ! ...

随机推荐

  1. Spring-boot 1.5.2 下隐藏Banner

    在配置文件中增加: spring.main.banner-mode=off

  2. Iterator接口用法

    1.所有实现Collection接口的容器类都有一个iteractor方法,用于返回一个实现了Iteractor接口的对象, 2.Iteractor对象成为迭代器,用以实现对容器内元素的遍历操作 3. ...

  3. Android Webservices 返回多行多列数据(Dataset)

    对于之前从事.net或者java开发人员,习惯了从后台获取网格数据(多行多列DataTable),但转行从事android开发,难免会不习惯 Android调用Webservice时,如果返回值是一个 ...

  4. cmder、cmd、python 中文乱码问题

    cmd下echo中文没有问题,但是进入python模式后就中文乱码,cmder更是echo也乱码 其实是要配置默认code page, cmd默认是ansi的编码,中文自然乱码 CMD chcp 65 ...

  5. Python学习笔记_01:基本概念介绍

    目录 1.Python语言简介 2.Python中常用数据结构 2.1什么是列表? 2.2什么是元组? 2.3什么是字典? 2.4索引及分片 3.其它基本概念 3.1数据类型和变量 3.2生成器 3. ...

  6. vue $options 获取自定义属性

    说明: https://cn.vuejs.org/v2/api/#vm-options 用于当前 Vue 实例的初始化选项.需要在选项中包含自定义属性时会有用处. element-ui代码中经常定义组 ...

  7. SQL Server事务复制搭建与同步经验

    0. 环境 无域环境 发布服务和分发服务器同一台主机 角色 主机名 IP 发布名 发布库名/订阅库名 发布服务器 Server1 192.168.1.100 test3 db1 分发服务器(与发布服务 ...

  8. Servlet学习(一)

    Servlet的运行过程 Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则直 ...

  9. .NET(C#):警惕PLINQ结果的无序性

    .NET(C#):警惕PLINQ结果的无序性 2012年08月10日 ⁄ 综合 ⁄ 共 620字 ⁄ 字号 小 中 大 ⁄ 评论关闭   PLINQ的运行结果是无序的,也就是不保持原来集合的顺序来操作 ...

  10. Linux手工添加swap

    swap是一把双刃剑,在实践中发现,严重的会导致linux负载超高,失去响应kswap内存的信息转存到swap(硬盘)!,在内存较大的情况下不建议建立swap!!! 师夷长技以制夷! 1.root权限 ...