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

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

主要的运行后布局:

   
    主要的通用功能和要求:

主要的方法体:

     动态的显示查询条件:

 1   //初始化联合查询的页面显示
 2
 3        private void ConditionBind()
 4        {
 5            /**///查询条件邦定
 6            DataTable dt = new DataTable();
 7            DataColumnCollection columns = dt.Columns;
 8            columns.Add("name");
 9            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                    可替换代码#region 可替换代码
 9                    //if (((FlowLayoutPanel)this.fpl.Controls[i]).Visible == false)
10                    //{
11                    //    ((FlowLayoutPanel)this.fpl.Controls[i]).Visible = true;
12                    //    break;
13                    //}
14                    #endregion
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语句#region   生成sql语句
14                    if (this.Controls.Find("fpl" + i, true)[0].Visible == true)
15                    {
16
17                        if (this.Controls.Find("cbSelect" + i, true)[0].Text != "所有")
18                        {
19                            ComboBox selectCondition = (ComboBox)this.Controls.Find("cbSelect" + i, true)[0];
20
21                            if (this.Controls.Find("txtFilter" + i, true)[0].Visible == true)
22                            {//为本类型
23                                isFirst++;
24                                if (isFirst == 1)//如果是第一次进入的话  isfirst应该为1
25                                {
26                                    sb.Append("  where  ");
27                                }
28                                else if (isFirst > 1)
29                                {
30                                    sb.Append(" and ");
31                                }
32                                else
33                                { }
34
35                                sb.Append(string.Format(" {0} like '%{1}%' ", selectCondition.SelectedValue.ToString().Trim(), this.Controls.Find("txtFilter" + i.ToString(), true)[0].Text.Trim()));
36
37                            }
38                            else if (this.Controls.Find("cbFilter" + i, true)[0].Visible == true)
39                            {//下拉框类型
40                                isFirst++;
41                                if (isFirst == 1)//如果是第一次进入的话  isfirst应该为1
42                                {
43                                    sb.Append("  where  ");
44                                }
45                                else if (isFirst > 1)
46                                {
47                                    sb.Append(" and ");
48                                }
49                                else
50                                { }
51                                sb.Append(string.Format(" {0} like '%{1}%' ", selectCondition.SelectedValue.ToString().Trim(), this.Controls.Find("cbFilter" + i.ToString(), true)[0].Text.Trim()));
52
53
54                            }
55                            else
56                            {//时间类型
57                                isFirst++;
58                                if (isFirst == 1)//如果是第一次进入的话  isfirst应该为1
59                                {
60                                    sb.Append("  where  ");
61                                }
62                                else if (isFirst > 1)
63                                {
64                                    sb.Append(" and ");
65                                }
66                                else
67                                { }
68                                sb.Append(string.Format(" {0} between '{1}' and '{2}' ", selectCondition.SelectedValue.ToString().Trim(), ((DateTimePicker)this.Controls.Find("dtp" + i.ToString() + "Begin", true)[0]).Value.ToShortDateString(), ((DateTimePicker)this.Controls.Find("dtp" + i.ToString() + "End", true)[0]).Value.ToShortDateString()));
69
70                            }
71
72                        }
73                    }
74                    #endregion
75                }
76                return sb.ToString();
77            }
78            catch (Exception ex)
79            {
80                MessageBox.Show(ex.Message);
81                return "";
82            }
84        }

注: 在设计过程中觉得最烦乱得是布局的设计 ,也许是不太熟练,浪费了很多的时间,好在通用或之际copy就ok了

      供下载的源文件链接  :   多条件动态查询通用模板下载

转载于:https://www.cnblogs.com/huomm/archive/2008/03/22/1117552.html

WINFORM 多条件动态查询 通用代码的设计与实现相关推荐

  1. mysql 使用if函数实现多条件动态查询

    简单多条件动态查询 1.条件为NULL时,不起作用 set @iid = NULL; select * FROM t_sys_cpy WHERE IF(@iid is NULL,1=1,ID = @i ...

  2. 页面多条件组合查询功能 代码 如何写效率高_Jeecg Boot 2.2 首个里程碑版本发布,低代码平台

    项目介绍 JeecgBoot是一款基于代码生成器的低代码开发平台,开源界"小普元"超越传统商业企业开发平台!采用前后端分离架构:SpringBoot 2.x,Ant Design& ...

  3. linq to sql的多条件动态查询(下)

    借助老外写的一个扩展表达式的类,可以把上篇中的代码写得更优雅 这是PredicateBuilder的源文件  public static class PredicateBuilder     ...{ ...

  4. (转)LINQ to Entities 多条件动态查询

    原文地址:http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx Some ...

  5. Linq to sql 实现多条件的动态查询(方法一)

    多条件动态查询在开发中太常见了,使用sql语句拼接很容易实现,但是在使用linq 的时候我却觉得很麻烦,思来想去,其实不然,linq 实现多条件动态查询一样可以变的很简单.话不多说,直接上例子,供大家 ...

  6. 航班动态查询api调用代码示例

    航班动态查询api代码,航班时刻表查询可实现查询本航段的航班号.本航段的起飞时刻(时分).本航段的ASR支持标志.本航段的舱位列表.本航段的到达时刻.本航段的到达日期修正.有效期限的起始时间(年月日) ...

  7. jpa多表联查动态_jpa多表关联动态查询(自定义sql语句)

    项目中,jpa对于简单的数据库操作很方便,但如果多表关联动态查询时,需要自己去写SQL语句拼接查询条件,以下为本人学习的例子. 类似于这种多条件动态查询: 项目用的是springboot 2.1.0. ...

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

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

  9. jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一.  诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...

最新文章

  1. maven_Maven提示:关于可执行jar的全部
  2. java正则表达式逗号_正则表达式只匹配逗号而不是括号?
  3. stl_config.h基本宏
  4. PHP机器学习库php-ml的简单测试和使用
  5. PHP大批量正则,php – 正则表达式匹配无限数量的选项
  6. 将一个datetime的now转换为只有日期的_不要眨眼!中英文、大小写转换,一秒就搞定!
  7. Kickstart之添加自动化脚本
  8. JS-[IIFE闭包]
  9. 一道C#类型转换的思考题
  10. Atitit.解决org.hibernate.DuplicateMappingException: Duplicate class/entity mapping
  11. inline函数_逼近函数(2)
  12. SCCM2012系列之六,SCCM2012部署前的WDS准备
  13. usb加密狗破解软件
  14. [飘渺女声]罗琳娜 麦肯尼(Loreena McKennitt)
  15. C++ 计算球体体积
  16. 正在安装其他程序,请等待安装完成
  17. LeetCode 557 反转字符串中的单词 III
  18. 文本文档写html图片显示不出来,word文档几种不显示图片的解决方法
  19. html中mark标记,html5 mark标签是什么意思?html5 mark标签的作用又是什么?
  20. matlab计算应力位移,2012年-有限元作业-matlab编程实现有限元求解简单结构位移及应力.doc...

热门文章

  1. Java实现拼音转汉字
  2. C语言如何实现面向对象?
  3. 多项式(polynomial)和 单项式(monomial)
  4. XScuGic_Connect分析
  5. 4.2.3 OS之减少磁盘延迟时间的方法(交替编号、错位命名)
  6. 运用HashMap和ArrayList打造一个简单的带文件的控制台学生管理系统(附上类及类方法的思维导图+控制台运行界面截图+源代码)
  7. python中format的用法菜鸟教程-初学者必知的Python中优雅的用法
  8. 博图注册表删除方法_技成周报40期 | 三菱、西门子软件安装常见出错解决方法...
  9. 设计模式理解:策略模式
  10. 常用API-1(Object类、String类、StringBuffer类、StringBuilder类)