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 这块的方法 只适用于一个对象针对某一个固定字 ...
随机推荐
- Word2010中如何在斜线表格中添加文字
http://jingyan.baidu.com/article/335530daa4127f19cb41c331.html
- CommonJS, AMD, CMD是什么及区别--简单易懂有实例
CommonJS, AMD, CMD都是JS模块化的规范. CommonJS是服务器端js模块化的规范,NodeJS是这种规范的实现. AMD(异步模块定义)和CMD(通用模块定义)都是浏览器端js模 ...
- AliOS-Things linkkitapp解读
app-example-linkkitapp是AliOS-Things提供的设备联网并且和阿里云IOT平台数据交互的一个示例程序: 1:application_start()程序在app_entry. ...
- 【Codeforces Round 1129】Alex Lopashev Thanks-Round (Div. 1)
Codeforces Round 1129 这场模拟比赛做了\(A1\).\(A2\).\(B\).\(C\),\(Div.1\)排名40. \(A\)题是道贪心,可以考虑每一个站点是分开来的,把目的 ...
- coredns CrashLoopBackOff 报错
1.kubectl logs -f coredns-99b9bb8bd-47mvf -n kube-system .:53 2018/09/22 07:39:37 [INFO] CoreDNS-1.2 ...
- 初识Identity(二)
本文参考了[ASP.NET Identity系列教程(一)]ASP.NET Identity入门 一.Identity使用前准备项目 本文创建了一个名称为Users的项目.在创建过程中选择了“Empt ...
- java算法----排序----(6)希尔排序(最小增量排序)
package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...
- 基于uFUN开发板和扩展板的联网校准时钟
项目概述 上周在uFUN试用群里看到管理员说试用活动快结束了,要抓紧完成评测总结,看大家的评测总结也都写了,我也不能落后啊!正好最近做的扩展板到手了,于是赶紧进行调试,做了一个不用校准的时钟,时钟这种 ...
- Linq 之 Select 和 where 的用法
最近开始学习linq.自己也总结一下,方便以后查阅. Select 同 Sql 中的 select 类似,即输出我们要的东东,感觉在 linq 中更加强大. Linq 可以对集合如数组.泛型等操作,这 ...
- 在 Ionic2 TypeScript 项目中导入第三方 JS 库
原文发表于我的技术博客 本文分享了在Ionic2 TypeScript 项目中导入第三方 JS 库的方法,供参考. 原文发表于我的技术博客 1. Typings 的方式 因在 TypeScript 中 ...