还记得第一次做机房的时候做组合查询功能吗?那时候的我从刚开始的一个一个判断,到后面的先是让关系框和后面的条件框不能用,根据条件框的填充情况来决定关系框是否能用。这样一步步的走过来的……
到了第二次的机房重构,我发现之前好多的代码都是重复的,做了那么多的无用功!作为一个优秀的程序员,我们要尽可能的减少自己的代码量,让我们的代码能够复用。这里我们要明白复用可不是复制哦!
在机房中,我们的基本学生信息维护、查看上机状态、上机信息统计和操作员工作记录四个窗体除了字段名不一样以外,几乎一样的,所以我们在做组合查询功能的时候用到了窗体的继承。
窗体的继承就是在父窗体中写好公共的部分,不一致的地方可以写一个虚方法,然后让子类们进行重写这个虚方法。这样,我们就只需要一个U层、一个B层、一个接口和一个抽象工厂,一个D层就可以实现四个窗体各自的功能了。
U层主要用来判断一下各个输入框和选择框是否为空,给实体参数和B层方法传值,定义转换数据库字段的虚方法和获取表名的虚方法。
?
/*************************************************
'作者:邢玉
'小组:
'说明:组合查询模板
'创建日期:2015.8.9
'版本号:
'**********************************************/
Imports System.Windows.Forms
Public Class frmGroupQuery
'定义一个保护类型的变量,子窗体也可以访问,以下是另一种写法
'Protected groupcheck As JFEntity.GroupEntity = New JFEntity.GroupEntity()
Protected groupcheck As New JFEntity.GroupEntity
Private Sub frmGroupQuery_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'操作符部分,因为操作符不变,所以在父窗体中加载
cmbOperator1.Items.Add(">")
cmbOperator1.Items.Add("<")
cmbOperator1.Items.Add("=")
cmbOperator1.Items.Add("<>")
cmbOperator2.Items.Add(">")
cmbOperator2.Items.Add("<")
cmbOperator2.Items.Add("=")
cmbOperator2.Items.Add("<>")
cmbOperator3.Items.Add(">")
cmbOperator3.Items.Add("<")
cmbOperator3.Items.Add("=")
cmbOperator3.Items.Add("<>")
'关系
cmbRelations1.Items.Add("与")
cmbRelations1.Items.Add("或")
cmbRelations2.Items.Add("与")
cmbRelations2.Items.Add("或")
'当选中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
''' ''' 清空查询条件和结果 '''
'''
'''
'''
Private Sub btnclear_Click(sender As Object, e As EventArgs) Handles btnclear.Click
cmbFiled1.Text = ""
cmbFiled2.Text = ""
cmbFiled3.Text = ""
cmbOperator1.Text = ""
cmbOperator2.Text = ""
cmbOperator3.Text = ""
txtContent1.Text = ""
txtContent2.Text = ""
txtContent3.Text = ""
cmbRelations1.Text = ""
cmbRelations2.Text = ""
DataGridView1.DataSource = ""
End Sub
''' ''' 退出 '''
'''
'''
'''
Private Sub btncancel_Click(sender As Object, e As EventArgs) Handles btncancel.Click
Me.Dispose()
End Sub
Private Sub btninquire_Click(sender As Object, e As EventArgs) Handles btninquire.Click
'判断组合框不为空
If cmbRelations1.Text = "" Then '如果第一个组合关系框为空
If cmbFiled1.Text = "" Or cmbOperator1.Text = "" Or txtContent1.Text = "" Then
MsgBox("第一行查询条件不能为空!", , "提示")
Exit Sub
End If
End If
If cmbRelations1.Text <> "" Then '如果选择了第一个组合关系
If cmbFiled2.Text = "" Or cmbOperator2.Text = "" Or txtContent2.Text = "" Then
MsgBox("第二行查询条件不能为空!", , "提示")
Exit Sub
End If
Else
If cmbRelations2.Text <> "" Then '选择了第二个组合关系
If cmbFiled1.Text = "" Or cmbOperator1.Text = "" Or txtContent1.Text = "" Or
cmbFiled2.Text = "" Or cmbFiled2.Text = "" Or txtContent2.Text = "" Or
cmbFiled3.Text = "" Or cmbFiled3.Text = "" Or txtContent3.Text = "" Then
MsgBox("第三行查询条件不能为空", , "提示")
Exit Sub
End If
End If
End If
'给实体赋值
groupcheck.GetTable = GetTable()
groupcheck.cmbField1 = GetDBName(cmbFiled1.Text.Trim())
groupcheck.cmbField2 = GetDBName(cmbFiled2.Text.Trim())
groupcheck.cmbField3 = GetDBName(cmbFiled3.Text.Trim())
groupcheck.cmbOperator1 = cmbOperator1.Text.Trim()
groupcheck.cmbOperator2 = cmbOperator2.Text.Trim()
groupcheck.cmbOper