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 这块的方法 只适用于一个对象针对某一个固定字 ...
随机推荐
- mysql中engine=innodb和engine=myisam的区别(转)
转自http://blog.csdn.net/lingyi_xu/article/details/5393791 innodb引擎和mysiam引擎的区别 引擎 事务 外键 建 ...
- 安装Docker和配置加速器(二)
一. 安装 docker-ce 1. 访问 https://opsx.alibaba.com/mirror 2. 打开这条URL: 二.Ubuntu 系统安装 Docker 1. 使用apt-get进 ...
- solvepnp
CV_EXPORTS_W bool solvePnP( InputArray objectPoints,- 世界坐标系下的控制点的坐标,vector<Point3f>的数据类型在这里可以使 ...
- vue指令相关的
阅读目录 1.v-text 2.v-html 3.v-show 4.v-if 5.v-if vs v-show 6.v-else 7.v-for 8.v-on 9.v-bind 和 v-model 1 ...
- MySQL 基础一 安装
1.下载安装包 2.安装MySQL 3.安装操作工具SQLyog 一 下载安装包 地址:百度软件中心MySQL安装包 下载安装操作工具安装包:SQLyog 安装教程地址:http://blog.csd ...
- EasyUI panel
1.脚本生成panel 2.panel属性 3.panel事件 4.panel方法 一 脚本生成panel <div id="tt"></div> < ...
- easyui datagrid JS加载样式 表头乱
解决方案,找了下资料,加一个遮罩层,提升用户体验. <script type="text/javascript"> var width = document.docum ...
- Ubuntu 安装google chrome
sudo apt-get install google-chrome-stable /usr/bin/google-chrome-stable
- Auto-ML之自动化特征工程
1. 引言 个人以为,机器学习是朝着更高的易用性.更低的技术门槛.更敏捷的开发成本的方向去发展,且Auto-ML或者Auto-DL的发展无疑是最好的证明.因此花费一些时间学习了解了Auto-ML领域的 ...
- nginx location url解析过程