机房重构--组合查询
来源:互联网 发布:淘宝达人模拟帖子 编辑:程序博客网 时间:2024/05/01 04:52
从5月6号开始敲组合查询,苦恼了三天,今天终于出形了!刚开始Bug满天飞,改了N遍,现在终于可以大概可以运行了,不管做的好不好得先自己做出来一份再说话,所以记录一下!后边完善优化后还会更新!
一、大概说说我的思路:
组合查询我用的模板方法和存储过程,三个组合查询其实都差不多,所以先建一个父窗体,然后让那三个子窗体继承父窗体,子窗体只用写UI层即可。
我的思路:
1、窗体加载事件:
(1)、DateTimePicker控件不可见
(2)、在加载的时候,只有第一行控件可用,后两行不可用
(3)、当选中DataGridView控件就选中行
2、清空按钮的单击事件:所有信息清空
3、查询按钮的单击事件:
(1)、定义一个用于接收“要查询的内容”的变量
注意:这里之所以定义一个变量是因为“要查询的内容”这里包括两个部分(文本框和日期时间控件)
(2)判断当第一个“组合关系”为空时:
a、如果字段名选择的是日期:文本框(txtContent1)不可见,时间控件(dtp1)可见,然后把选择的日期赋给txt1,最后判第一行控件有没有空的
b如果选择的非日期:时间控件(dtp1)不可见,文本框(txtContent1)可见,把txtContent1的值赋给txt1
(3)、第一个“组合关系”不为空时:(和判断当第一个“组合关系”为空时相似,这里就不说了)
我把第三行组合控件的相关判断放在了Else后面,具体如下代码
(4)、给实体赋值
(5)、给外观层传参
4、组合关系(cmbRelation)的SelectedIndexChanged事件:
当哪个组合关系的内容发生改变时,把下一行的查询框设置成可用
5、字段名(cmbField)的SelectedIndexChanged事件:
如果字段名选择的是日期则日期控件可见,文本框控件不可见
6、定义虚函数
7、显示DataGridView
二、简单说几个困扰过我的问题:
1、问题:日期传值,刚开始我用的Format(dtp1.Value,"yyyy-MM-dd")去传值,结果不是显示空,就是传的现在的日期时间,不是我查询时选择的日期时间,操作符选择“=”就报错
解决:用“dtp1.Text.ToString()”传值!
具体请看代码部分
2、问题:把U层的“要查询的信息”传给实体时,它说“变量在赋值前被使用,可能会在运行时导致Null引用异常”
解决:没给变量赋初值
3、问题:SQLHelper老报错,语法的问题
解决:仔细看看检查存储过程
三、父窗体U层代码:(D层也不展示了,和那些窗体的D层其实没有太大差别)
Public Class frmZuHe '定义实体 Protected ZuHeInfo As New Entity.ZuHeEntity '窗体加载 Private Sub frmZuHe_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'DateTimePicker控件的可见性 dtp1.Visible = False dtp2.Visible = False dtp3.Visible = False '在加载的时候,只有第一行控件可用,后两行不可用 cmbField2.Enabled = False cmbField3.Enabled = False cmbOperator2.Enabled = False cmbOperator3.Enabled = False cmbRelation2.Enabled = False txtContent2.Enabled = False txtContent3.Enabled = False '当选中DataGridView控件就选中行 DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect Dim i As Integer For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).Width = DataGridViewAutoSizeColumnMode.AllCells Next End Sub '查询 Public Sub btnInquiry_Click(sender As Object, e As EventArgs) Handles btnInquiry.Click '定义一个变量,用于接收文本框或者时间控件传递的内容 Dim txt1 As String = "" Dim txt2 As String = "" Dim txt3 As String = "" '1、第一个组合关系为空 If cmbRelation1.Text = "" Then If cmbField1.Text = "上机日期" Or cmbField1.Text = "下机日期" Then dtp1.Format = DateTimePickerFormat.Custom dtp1.Visible = True txtContent1.Visible = False txt1 = dtp1.Text.ToString() Else dtp1.Visible = False txtContent1.Visible = True txt1 = txtContent1.Text End If If cmbField1.Text = "" Or cmbOperator1.Text = "" Or txt1 = "" Then MsgBox("第一行查询条件不能为空!", , "提示") Exit Sub End If End If '2、选择了第一个组合关系 If cmbRelation1.Text <> "" Then If cmbField2.Text = "上机日期" Or cmbField2.Text = "下机日期" Then dtp2.Format = DateTimePickerFormat.Custom dtp2.Visible = True txtContent2.Visible = False txt2 = dtp2.Text.ToString() Else txtContent2.Visible = True dtp2.Visible = False txt2 = txtContent2.Text If cmbField2.Text = "" Or cmbOperator2.Text = "" Or txt2 = "" Then MsgBox("第二行查询条件不能为空!", , "提示") Exit Sub End If End If '选择了第二个组合关系 Else If cmbRelation2.Text <> "" Then If cmbField3.Text = "上机日期" Or cmbField3.Text = "下机日期" Then dtp3.Format = DateTimePickerFormat.Custom dtp3.Visible = True txtContent3.Visible = False txt3 = dtp3.Text.ToString() Else txtContent3.Visible = True dtp3.Visible = False txt3 = txtContent3.Text End If If cmbField3.Text = "" Or cmbOperator3.Text = "" Or txt3 = "" Then MsgBox("此时所有的信息都要填写,有空的信息没有填写,请检查!", , "提示") Exit Sub End If End If End If '给实体赋值 ZuHeInfo.TableName = GetTable() '字段名赋值 ZuHeInfo.CmbField1 = GetDBName(cmbField1.Text.Trim()) ZuHeInfo.CmbField2 = GetDBName(cmbField2.Text.Trim()) ZuHeInfo.CmbField3 = GetDBName(cmbField3.Text.Trim()) ZuHeInfo.CmbOperator1 = cmbOperator1.Text.Trim() ZuHeInfo.CmbOperator2 = cmbOperator2.Text.Trim() ZuHeInfo.CmbOperator3 = cmbOperator3.Text.Trim() ZuHeInfo.TxtContent1 = txt1 ZuHeInfo.TxtContent2 = txt2 ZuHeInfo.TxtContent3 = txt3 '组合关系赋值 ZuHeInfo.CmbRelation1 = GetDBName(cmbRelation1.Text.Trim()) ZuHeInfo.CmbRelation2 = GetDBName(cmbRelation2.Text.Trim()) '给外观层方法传递参数 Dim dt As New DataTable Dim faca As New Facade.ZuHeFacade dt = faca.CheckZuHe(ZuHeInfo) If dt.Rows.Count = 0 Then MsgBox("没有符合查询条件的数据,请重新选择查询条件!", , "提示") DataGridView1.DataSource = Nothing Else Call Todatagridview() End If End Sub '当第一个组合关系的内容发生改变时,把第二行查询框设置成可用 Private Sub cmbRelation1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation1.SelectedIndexChanged cmbField2.Enabled = True cmbOperator2.Enabled = True txtContent2.Enabled = True cmbRelation2.Enabled = True End Sub '当第二个组合关系的内容发生改变时,把第三行查询框设置成可用 Private Sub cmbRelation2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation2.SelectedIndexChanged cmbField3.Enabled = True cmbOperator3.Enabled = True txtContent3.Enabled = True End Sub '定义虚函数GetDBName,获取不同数据库的字段名 Public Overridable Function GetDBName(ByVal control As String) As String Return "" End Function '定义虚函数GetTable,获取不同数据库的表名 Public Overridable Function GetTable() As String Return "" End Function '把表显示到DataGridView中 Protected Overridable Sub Todatagridview() DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells End Sub '1查询与日期、时间 Private Sub cmbField1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField1.SelectedIndexChanged If cmbField1.Text = "上机日期" Or cmbField1.Text = "下机日期" Then dtp1.Visible = True txtContent1.Visible = False End If End Sub '2查询与日期、时间 Private Sub cmbField2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField2.SelectedIndexChanged If cmbField2.Text = "上机日期" Or cmbField2.Text = "下机日期" Then dtp2.Visible = True txtContent2.Visible = False End If End Sub '3查询与日期、时间 Private Sub cmbField3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField3.SelectedIndexChanged If cmbField3.Text = "上机日期" Or cmbField3.Text = "下机日期" Then dtp3.Visible = True txtContent3.Visible = False End If End Sub '清空:调用模块中的清空方法 Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click Call Rdim() If AllEmpty(arrayControl) Then Exit Sub End If DataGridView1.DataSource = "" End Sub '清空:定义一个过程Rdim(),作用是初始化这个Term类型的结构体数组 Private Sub Rdim() '重定义数组维数 ReDim Preserve arrayControl(10) '初始化数组 arrayControl(0) = New Term(cmbField1, "字段名") arrayControl(1) = New Term(cmbField2, "字段名") arrayControl(2) = New Term(cmbField3, "字段名") arrayControl(3) = New Term(cmbOperator1, "操作符") arrayControl(4) = New Term(cmbOperator2, "操作符") arrayControl(5) = New Term(cmbOperator3, "操作符") arrayControl(6) = New Term(txtContent1, "查询内容") arrayControl(7) = New Term(txtContent2, "查询内容") arrayControl(8) = New Term(txtContent3, "查询内容") arrayControl(9) = New Term(cmbRelation1, "组合关系") arrayControl(10) = New Term(cmbRelation2, "组合关系") End Sub '退出 Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click Me.Close() End SubEnd Class
四、操作符和组合关系下拉框的符号啥的我没写代码,直接改的属性!
- 机房重构--组合查询
- 机房重构组合查询
- 机房重构-组合查询
- 机房重构——组合查询
- 机房重构之组合查询
- 【机房重构】奋斗组合查询
- 机房重构——组合查询
- 机房重构之组合查询
- 机房重构——组合查询
- 机房重构——组合查询
- 机房重构之组合查询
- 机房重构之组合查询
- 机房重构—组合查询
- 【机房重构】之组合查询
- 机房重构之组合查询
- 重构机房组合查询之学生基本信息查询
- 组合查询(机房重构知识点总结)
- 走在机房重构的路上之组合查询
- 管道和消息队列实现进程间通信
- Vue.js——60分钟组件快速入门(上篇)
- Java琐碎小知识(三)
- 文件操作
- Mybatis-动态SQL
- 机房重构--组合查询
- MyEclispe创建简单的满足maven规范的java项目
- Html之css篇
- 合并数组并排序
- C语言概述
- spring+httpclient完美集成,封装常用客户端工具类
- Dagger2的使用总结
- Java8-概述
- 窗口看门狗实验