经常碰到多条件联合查询的问题,以前的习惯认为很简单总会从头开始设计布局代码,往往一个查询面要费上老半天的功夫,而效果也不咋地。

       前段时间做了个相对通用的多条件动态查询面,复用起来还是挺方便的,放上来共参考指导 。
                                                                         供下载的源文件链接  :   多条件动态查询通用模板下载

主要的运行后布局:

   
    主要的通用功能和要求:

主要的方法体:

     动态的显示查询条件:

    //初始化联合查询的页面显示
 
         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            try
19            {
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        }

按查询条件设置显示模式:

 1  private void SetFilterCondition(ref ComboBox conditionselect)
 2        {
 3            try
 4            {
 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                        else
28                        {
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        }

添加条件

 1
 2        private void AddFilter()
 3        {
 4            try
 5            {
 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语句

 1  private string BuildSQL()
 2        {
 3            try
 4            {
 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 多条件动态查询 通用代码的设计与实现的更多相关文章

  1. [Spring cloud 一步步实现广告系统] 4. 通用代码模块设计

    一个大的系统,在代码的复用肯定是必不可少的,它能解决: 统一的响应处理(可以对外提供统一的响应对象包装) 统一的异常处理(可以将业务异常统一收集处理) 通用代码定义.配置定义(通用的配置信息放在统一的 ...

  2. Gradle配置IDEA正常识别JPA Metamodel Generator动态生成的代码

    我们在使用JPA动态查询构建查询条件时,为了实现安全的类型检查,常常需要引用Hibernate JPA Metamodel Generator自动为我们生成静态元模型类. 而这些类由于编译时由Hibe ...

  3. C# Linq to Entity 多条件 OR查询

    技术背景:框架MVC,linq to Entity 需要一定的lambda书写能力 问题:在简单的orm中完成一些简单的增删查改是通过where insert delete update 完成的,但是 ...

  4. Linq to Entity 多条件 OR查询

    技术背景:框架MVC,linq to Entity 需要一定的lambda书写能力 问题:在简单的orm中完成一些简单的增删查改是通过where insert delete update 完成的,但是 ...

  5. spring data jpa封装specification实现简单风格的动态查询

    github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...

  6. Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询

    原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...

  7. 浅析Entity Framework Core2.0的日志记录与动态查询条件

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...

  8. WinForm动态查询

    WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...

  9. Spring data jpa 实现简单动态查询的通用Specification方法

    本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...

随机推荐

  1. mac下安装nginx及相关配置

    1. 安装 Homebrew   首先 homebrew是什么?它是Mac中的一款软件包管理工具,通过brew可以很方便的在Mac中安装软件或者是卸载软件.不了解的同学看以看官网(https://br ...

  2. docker常用命令汇总

    生成镜像docker build -t="eureka" .打标记docker tag eureka:latest 172.16.120.194:5000/eureka:lates ...

  3. 数据可视化matplotlib、seaborn、pydotplus

    如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10486560.html 一.数据可视化 data.mat 链接:https://p ...

  4. Quartz的JobDetail没有触发器指向时会被删除的问题

    之前项目里使用的是老版本的Quartz,才1.6.5.发现一个问题,如果我触发器配置的时间已经过了,想去手动触发一个任务,就会报找不到这个任务的异常,通过debug可以发现,Scheduler里添加j ...

  5. 『转』统计一个日志文件里,单词出现频率的shell脚本

    原文地址:http://blog.csdn.net/taiyang1987912/article/details/39995175 #查找文本中n个出现频率最高的单词 #!/bin/bash coun ...

  6. tornado学习篇(第二部)

    执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,     #!usr/bin/env python #coding:utf-8 n ...

  7. Apache与Nginx

    Apache与Nginx的优缺点比较  ---   1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的 ...

  8. (转)Linux的用户和用户组管理

    原文 Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并 ...

  9. Http指南(1)

    网关:是一种特殊的服务器,作为其他服务器的中间实体使用; Agent代理:所有发布web请求的应用程序都是HTTP Agent代理.Web浏览器其实就是一种代理; HTTP报文是在HTTP应用程序之间 ...

  10. 【下一代核心技术DevOps】:(三)私有代码库阿里云Git使用

    1. 引言 使用DevOps肯定离不开和代码的集成.所以要想跑通整套流程,代码库的选型也是非常重要的.否则无法实现持续集成.目前比较常用的代码管理有SVN和GIt 如果还使用SVN的,建议尽早迁移到G ...