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 这块的方法 只适用于一个对象针对某一个固定字 ...
随机推荐
- MATLAB——径向基网络拟合曲线和分类
1.:.:; rand('state',pi); %指定状态,产生相同的随机数 T=sin(*P)+rand(,length(P)); % 给正弦函数加噪声 plot(P,T,'o') % net=n ...
- 深入浅出的webpack构建工具---PostCss(五)
一:PostCss是什么? PostCss是一个样式处理工具,它通过自定义的插件和工具生态体系来重新定义css.它鼓励开发者使用规范的css原生语法编写代码,然后配置编译器转换需要兼容的浏览器版本, ...
- centos7环境搭建
1. tar命令安装 yum install -y tar 2. jdk8下载 wget --no-check-certificate --no-cookies --header "Cook ...
- Android学习之基础知识三(Android日志工具Log的使用)
Android中的日志工具Log(android.util.Log): 1.打印日志的方法(按级别从低到高排序): Log.v():级别verbose,用于打印最为烦琐,意义最小的日志 Log.d() ...
- Python 远程桌面协议RDPY简介
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议. RDPY ...
- mqtt 客户端 基于Python
这几天一直在搞安全通信,微信小程序,反向代理等等,为了能让自己对整个系统做到把控,主要是需要了解每一个细节的地方,所以今天花了3个小时的时间学习了Python,因为我要用它来做Http和WebSock ...
- 13-(基础入门篇)系统教程演示(GPRS模块)
https://www.cnblogs.com/yangfengwu/p/9966702.html 前几节作为基础教程和系统教程的开端,有了前面的基础才更好的学习基础教程和系统教程. https:// ...
- Luogu2164 SHOI2007 交通网络 期望、BFS、拓扑排序
传送门 题目还算不难吧 首先我们枚举点$i$,将其他所有点到这个点的最短路求出来 然后我们在这一次建出的最短路$DAG$的反图上进行拓扑排序.假设我们算到了点$j$,点$j$的人流量为$t_j$,点$ ...
- core_cm4_simd.h文件是干嘛的?
core_cm4_simd.h文件用于simd指令,即单指令多数据流,这个只有ARMv7架构才有,Cortex m3 m4 m7是ARMv7架构,而Cortex m0 m1是没有的. 所以,在新建Co ...
- 面试2——java基础2
11.MVC设计模型 mvc设计模型是一种使用model-view-controller(模型-视图-控制器)设计创建web应用程序的模式.是一种开发模式,好处是可以将界面和业务逻辑分离. model ...