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

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

主要的运行后布局:

   
    主要的通用功能和要求:

主要的方法体:

     动态的显示查询条件:

    //初始化联合查询的页面显示
 
         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. 分布式缓存技术redis系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  2. 超简单Mac安装Tomcat服务器

    超简单Mac安装Tomcat服务器 1.首先下载tomcat 下载连接 2. 解压并改名 3.把Tomcat复制到系统中的资源库或者Library 4.打开shell,进入Tomcat下面的bin目录 ...

  3. vue-resource get/post请求如何携带cookie的问题

    vue-resource get/post请求如何携带cookie的问题 当我们使用vue请求的时候,我们会发现请求头中没有携带cookie传给后台,我们可以在请求时添加如下代码:vue.http.o ...

  4. python 数据结构 队列(queue)

    如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10293817.html 欢迎关注小婷儿的博客: 有问题请在博客下留言或加作者微信:t ...

  5. 如何迅速入门STM32

    我想说,为了学习单片机而去学习单片机的思路不对. 你问,如何系统地入门学习stm32? 本身就是一个错误的问题.假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习. 你要考虑的 ...

  6. YOU AND ME 不见不散(转载)

    (看到一篇挺不错的文章,看了挺有感触的,与大家共勉.) 泰戈尔说: 有一个夜晚,我烧毁了所有的记忆, 从此我的梦就透明了: 有个早晨我扔掉了所有的昨天, 从此我的脚步就轻盈了! 越过山丘,才发现无人等 ...

  7. visual studio Web发布至 IIS WebDeploy出错(未能创建SSL/TLS安全通道)Could not create SSL/TLS secure channel

    问题发生的原因是VS 15.9尝试使用系统默认值进行TLS握手,但是要在VS内的某处设置为TLS1.2. 此问题的解决方法是在部署项目的IIS服务器上启用TLS 1.2.例如,请按照此文章中的说明操作

  8. Luogu P3455 [POI2007]ZAP-Queries

    由于之前做了Luogu P2257 YY的GCD,这里的做法就十分套路了. 建议先看上面一题的推导,这里的话就略去一些共性的地方了. 还是和之前一样设: \[f(d)=\sum_{i=1}^a \su ...

  9. Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效

    这个星期在使用qt,碰到一个很蛋疼的问题:创建对话框的时候,不小心输错了名字.而且是在很迟才发现的.这个时候对话框都已经布局差不多了,为了改名字,碰到更蛋疼的问题,改了名字后就无法使用转到槽的功能了. ...

  10. PHP中报500错误时如何查看错误信息

    在执行代码中加入下面两行代码即可 ini_set("display_errors","On"); error_reporting(E_ALL);