WINFORM 多条件动态查询 通用代码的设计与实现
经常碰到多条件联合查询的问题,以前的习惯认为很简单总会从头开始设计布局代码,往往一个查询面要费上老半天的功夫,而效果也不咋地。
前段时间做了个相对通用的多条件动态查询面,复用起来还是挺方便的,放上来共参考指导 。
供下载的源文件链接 : 多条件动态查询通用模板下载
主要的运行后布局:

主要的通用功能和要求:
主要的方法体:
动态的显示查询条件:
private void ConditionBind()
{
//查询条件邦定
DataTable dt = new DataTable();
DataColumnCollection columns = dt.Columns;
columns.Add("name");
columns.Add("key");
10
DataRowCollection rows = dt.Rows;11
rows.Add("所有", "All");12
rows.Add("单据号", "Code");13
rows.Add("供应商名称", "SupplierName");14
rows.Add("经办人", "EmployeesName");15
rows.Add("时间", "time"); 18
try19
{20
for (int i = 0; i < this.fpl.Controls.Count; i++)21
{23
if (this.Controls.Find("fpl" + i, true).Length > 0)24
{25
((ComboBox)this.Controls.Find("cbSelect" + i, true)[0]).DisplayMember = "name";26
((ComboBox)this.Controls.Find("cbSelect" + i, true)[0]).ValueMember = "key";27
//用copy解决联动问题28
((ComboBox)this.Controls.Find("cbSelect" + i, true)[0]).DataSource = dt.Copy();29
}31
}34
}35
catch (Exception ex)36
{37
MessageBox.Show(ex.Message);38
}42
}按查询条件设置显示模式:
private void SetFilterCondition(ref ComboBox conditionselect)2
{3
try4
{5
for (int i = 0; i < this.fpl.Controls.Count; i++)6
{7
if (conditionselect.Name == "cbSelect" + i.ToString())8
{9
if (conditionselect.Text == "时间")10
{11
if (this.Controls.Find("fplFilter" + i, true).Length > 0)12
this.Controls.Find("fplFilter" + i, true)[0].Visible = true;13
if (this.Controls.Find("txtFilter" + i, true).Length > 0)14
this.Controls.Find("txtFilter" + i, true)[0].Visible = false;15
if (this.Controls.Find("cbFilter" + i, true).Length > 0)16
this.Controls.Find("cbFilter" + i, true)[0].Visible = false;17
}18
else if (conditionselect.Text == "供应商名称")//在通用中需要修改或添加19
{20
if (this.Controls.Find("fplFilter" + i, true).Length > 0)21
this.Controls.Find("fplFilter" + i, true)[0].Visible = false;22
if (this.Controls.Find("txtFilter" + i, true).Length > 0)23
this.Controls.Find("txtFilter" + i, true)[0].Visible = false;24
if (this.Controls.Find("cbFilter" + i, true).Length > 0)25
this.Controls.Find("cbFilter" + i, true)[0].Visible = true;26
}27
else28
{29
if (this.Controls.Find("fplFilter" + i, true).Length > 0)30
this.Controls.Find("fplFilter" + i, true)[0].Visible = false;31
if (this.Controls.Find("txtFilter" + i, true).Length > 0)32
this.Controls.Find("txtFilter" + i, true)[0].Visible = true;33
if (this.Controls.Find("cbFilter" + i, true).Length > 0)34
this.Controls.Find("cbFilter" + i, true)[0].Visible = false;36
}40
}41
}42
}43
catch (Exception ex)44
{45
MessageBox.Show(ex.Message);46
}47
}添加条件

2
private void AddFilter()3
{4
try5
{6
for (int i = 0; i < this.fpl.Controls.Count; i++)7
{8
可替换代码16
if (this.Controls.Find("fpl" + i, true).Length > 0)17
{18
if (this.Controls.Find("fpl" + i, true)[0].Visible == false)19
{20
this.Controls.Find("fpl" + i, true)[0].Visible = true;21
break;22
}23
}25
}26
}27
catch (Exception ex)28
{29
MessageBox.Show(ex.Message);30
}31
}提取sql语句
private string BuildSQL()2
{3
try4
{6
StringBuilder sb = new StringBuilder();7
//需要的时候修改表明 得到通用8
sb.Append("select * from InStoreBill_View ");9
//用于判断是否是第一条数据 用于添加where的判断10
int isFirst = 0;11
for (int i = 0; i < this.fpl.Controls.Count; i++)12
{13
生成sql语句75
}76
return sb.ToString();77
}78
catch (Exception ex)79
{80
MessageBox.Show(ex.Message);81
return "";82
}84
}注: 在设计过程中觉得最烦乱得是布局的设计 ,也许是不太熟练,浪费了很多的时间,好在通用或之际copy就ok了
WINFORM 多条件动态查询 通用代码的设计与实现的更多相关文章
- [Spring cloud 一步步实现广告系统] 4. 通用代码模块设计
一个大的系统,在代码的复用肯定是必不可少的,它能解决: 统一的响应处理(可以对外提供统一的响应对象包装) 统一的异常处理(可以将业务异常统一收集处理) 通用代码定义.配置定义(通用的配置信息放在统一的 ...
- Gradle配置IDEA正常识别JPA Metamodel Generator动态生成的代码
我们在使用JPA动态查询构建查询条件时,为了实现安全的类型检查,常常需要引用Hibernate JPA Metamodel Generator自动为我们生成静态元模型类. 而这些类由于编译时由Hibe ...
- C# Linq to Entity 多条件 OR查询
技术背景:框架MVC,linq to Entity 需要一定的lambda书写能力 问题:在简单的orm中完成一些简单的增删查改是通过where insert delete update 完成的,但是 ...
- Linq to Entity 多条件 OR查询
技术背景:框架MVC,linq to Entity 需要一定的lambda书写能力 问题:在简单的orm中完成一些简单的增删查改是通过where insert delete update 完成的,但是 ...
- spring data jpa封装specification实现简单风格的动态查询
github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...
- 浅析Entity Framework Core2.0的日志记录与动态查询条件
前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...
- WinForm动态查询
WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...
- Spring data jpa 实现简单动态查询的通用Specification方法
本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...
随机推荐
- httpclient实现的get请求及post请求
导出mven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId& ...
- <转>七种测试驱动模式
本文转载自微信公众号:中国软件测试联盟 在进行软件测试时,我们都需要一个出发点,从哪里开始分析?测试设计是基于什么?简单说,就是什么驱动测试工作的进行? 基于对软件工程.产品质量和测试的理解,归纳出以 ...
- python条件、循环语句
既然讲到语句,那先说明一下语句块.语句块不是一种语句,是一组语句.在条件为真时执行或者多次的一组语句.主要注意其格式,用冒号来标识语句块的开始,块中每行缩进相同的量,一般4个空格(tab字符位置为8个 ...
- calico 原理分析
1.calico没有使用CNI的网桥模式,calico的CNI插件还需要在host机器上为每个容器的veth pair配置一条路由规则.cni插件是calico与kubernetes对接部分. 2.B ...
- TravelPort官方API解读
TravelPort Ping通使用教程 Unit1 Lesson 1: 标签(空格分隔): 完成第1单元的三个课程后,您可以使用Travelport Universal API来提出服务请求并了解响 ...
- SQL Server-聚焦深入理解死锁以及避免死锁建议(转载)
前言 终于进入死锁系列,前面也提到过我一直对隔离级别和死锁以及如何避免死锁等问题模棱两可,所以才鼓起了重新学习SQL Server系列的勇气,本节我们来讲讲SQL Server中的死锁,看到许多文章都 ...
- c# 获取文件本身的哈希值
1. 哈希值是什么 我个人认为,哈希值是一个统称,也就是经过加密算法后得出的长度较短.位数固定的输出序列即散列值,这个哈希值是一个凭证,一个数字签名之类的,唯一对应你加密之前的东西,这都是我自个儿觉得 ...
- 因写太多 BUG!程序员遭公司颁奖羞辱,做的一个比一个绝
刚入职的程序员新人,办公桌上,基本上也就一电脑.一键盘.一鼠标,再配个被杯子.然而混迹职场多年的猿老们,办公桌上都有一些彰显身份地位的“好东西”. 这张图两点颇多,最显眼的,是办公桌上那个黄黄的东西, ...
- 【精】【入门篇】js正则表达式
前言 最近有了点时间,就回头看了一下<学习正则表达式>这本书.怎么说呢,这本书适合从零开始学习正则表达式或者有一点基础但是想要加强这方面能力的读者.这本书的风格是“实践出真知”,使用归纳方 ...
- CentOS7中安装redis5.0
1. 环境介绍 CentOS7 (未安装Development Tools) 2. 下载Redis5.0-rc3 wget -O redis-5.0-rc3.tar.gz https://github ...