机房重构组合查询

      进行了机房重构组合查询,涉及到一个模板设计模式。很简单的理解,就像先制作好一个模板样式,然后再创建继承这个窗体的子窗体。

       1、为什么要用模板

        有了模板窗体之后,很大程度上方便了我们创造与之相似度很大(窗体界面相同,控件属性相同,公共的方法抽象出来放在模板窗体中)的继承子窗体(子窗体这时候可以有自己私有的属性和方法)。减少了重复的代码量,和相同方法的声明定义(只需重写即可),在继承子窗体中可以更清楚的明白个体继承子窗体之间的区别在那。

        2、如何创建模板并使用模板

       他们的实体界面在未运行前有一定的区别,如何创建如下操作:

       1)首先在UI层添加一个普通的窗体,把窗体的界面设置好,对控件的属性和抽象方法写在代码层。

        

Imports System.Data
Imports System.IO
Imports Entity

Public Class frmGroupQuery
    '定义一个实体,用于接收文本框或者时间空间传递的内容
    Public txt1 As String = ""
    Public txt2 As String = ""
    Public txt3 As String = ""
    Protected GroupQueryInfo As New Entity.E_GroupQueryEntity

    '窗体加载
    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("或")
        cmbRelations1.Items.Add("")

        cmbRelations2.Items.Add("与")
        cmbRelations2.Items.Add("或")
        cmbRelations2.Items.Add("")

        'DateTimePicker控件的可见性  
        dtp1.Visible = False
        dtp2.Visible = False
        dtp3.Visible = False

        '在加载的时候,只有第一行控件可用,后两行控件不可用    
        cmbField2.Enabled = False
        cmbField3.Enabled = False
        cmbOperator2.Enabled = False
        cmbOperator3.Enabled = False
        cmbRelations2.Enabled = False
        txtContent2.Enabled = False
        txtContent3.Enabled = False

        '当选中dgvGroupCheck控件就选中行    
        dgvGroupCheck.SelectionMode = DataGridViewSelectionMode.FullRowSelect
        Dim i As Integer
        For i = 0 To dgvGroupCheck.Columns.Count - 1
            dgvGroupCheck.Columns(i).Width = DataGridViewAutoSizeColumnMode.AllCells
        Next

    End Sub

    '清除功能
    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        cmbField1.Text = ""
        cmbField2.Text = ""
        cmbField3.Text = ""

        cmbOperator1.Text = ""
        cmbOperator2.Text = ""
        cmbOperator3.Text = ""

        txtContent1.Text = ""
        txtContent2.Text = ""
        txtContent3.Text = ""

        cmbRelations1.Text = ""
        cmbRelations2.Text = ""

        dgvGroupCheck.DataSource = ""
    End Sub

    Private Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.Click



        dgvGroupCheck.DataSource = ""

        '判断组合框不为空    
        If cmbRelations1.Text = "" Then '如果第一个组合关系框为空    
            If cmbField1.Text = "" Or cmbOperator1.Text = "" Or txt1 = "" Then
                MsgBox("第一行查询条件不能为空!", , "提示")
                Exit Sub
            End If
        End If

        If cmbRelations1.Text <> "" Then '如果选择了第一个组合关系    
            If cmbField2.Text = "" Or cmbOperator2.Text = "" Or txt2 = "" Then
                MsgBox("第二行查询条件不能为空!", , "提示")
                Exit Sub
            End If
        Else
            If cmbRelations2.Text <> "" Then '选择了第二个组合关系    
                If cmbField1.Text = "" Or cmbOperator1.Text = "" Or txt1 = "" Or
                    cmbField2.Text = "" Or cmbField2.Text = "" Or txt2 = "" Or
                    cmbField3.Text = "" Or cmbField3.Text = "" Or txt3 = "" Then
                    MsgBox("第三行查询条件不能为空", , "提示")
                    Exit Sub
                End If
            End If
        End If

        '给实体赋值    
        GroupQueryInfo.tableName = GetTable()

        GroupQueryInfo.cmbField1 = GetDBName(cmbField1.Text.Trim())
        GroupQueryInfo.cmbField2 = GetDBName(cmbField2.Text.Trim())
        GroupQueryInfo.cmbField3 = GetDBName(cmbField3.Text.Trim())

        GroupQueryInfo.cmbOperator1 = cmbOperator1.Text.Trim()
        GroupQueryInfo.cmbOperator2 = cmbOperator2.Text.Trim()
        GroupQueryInfo.cmbOperator3 = cmbOperator3.Text.Trim()

        GroupQueryInfo.txtContent1 = txt1
        GroupQueryInfo.txtContent2 = txt2
        GroupQueryInfo.txtContent3 = txt3

        GroupQueryInfo.cmbRelations1 = GetDBName(cmbRelations1.Text.Trim())
        GroupQueryInfo.cmbRelations2 = GetDBName(cmbRelations2.Text.Trim())

        '给外观层方法传递参数    
        Dim table As DataTable
        Dim Fgroupcheck As New Facade.Fe_GroupQueryFacade
        Call Rdim()
        If CheckSpecialString(arrayControl) Then
            Exit Sub
        End If

        table = Fgroupcheck.GroupQuery(GroupQueryInfo)
        If (table.Rows.Count = 0) Then
            MsgBox("没有符合条件的记录,请重新设置查询条件", , "提示")
            dgvGroupCheck.DataSource = Nothing
        Else
            Call Todatagridview()
        End If
    End Sub

    '定义虚函数获取字段名
    Public Overridable Function GetDBName(ByVal control As String) As String
        Return ""
    End Function
    '定义虚函数获取数据库名
    Protected Overridable Function GetTable() As String
        Return ""
    End Function
    '把表显示到dgvGroupCheck中    
    Protected Overridable Sub Todatagridview()
        dgvGroupCheck.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
    End Sub

    '当一个组合关系框的内容发生改变时,设置第二行的查询框状态
    Private Sub cmbRelations1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelations1.SelectedIndexChanged
        cmbField2.Enabled = True
        cmbOperator2.Enabled = True
        txtContent2.Enabled = True
        cmbRelations2.Enabled = True
    End Sub

    '当第二个组合关系框的内容发生改变时,设置第三行查询框的状态(是否可用)  
    Private Sub cmbRelations2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelations2.SelectedIndexChanged
        cmbField3.Enabled = True
        cmbOperator3.Enabled = True
        txtContent3.Enabled = True
    End Sub

    '针对查询与日期、时间有关的问题  
    Private Sub cmbField1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField1.SelectedIndexChanged

        If cmbField1.Text = "上机日期" Or cmbField1.Text = "下机日期" Or cmbField1.Text = "上机时间" Or cmbField1.Text = "下机时间" Then
            dtp1.Format = DateTimePickerFormat.Custom
            dtp1.Visible = True
            txtContent1.Visible = False

            If (cmbField1.Text = "上机日期" Or cmbField1.Text = "下机日期") = True Then
                txt1 = Format(dtp1.Value, "yyyy-MM-dd")
            Else
                dtp1.Format = DateTimePickerFormat.Time
                txt1 = Format(dtp1.Value, "hh:mm:ss")
            End If
        Else
            dtp1.Visible = False
            txtContent1.Visible = True
            txt1 = txtContent1.Text
        End If
 
    End Sub

    '针对查询与日期、时间有关的问题  
    Private Sub cmbField2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField2.SelectedIndexChanged

        If cmbField2.Text = "上机日期" Or cmbField2.Text = "下机日期" Or cmbField2.Text = "上机时间" Or cmbField2.Text = "下机时间" Then
            dtp2.Format = DateTimePickerFormat.Custom
            dtp2.Visible = True
            txtContent2.Visible = False
            If cmbField2.Text = "上机日期" Or cmbField2.Text = "下机日期" Then
                txt2 = Format(dtp2.Value, "yyyy-MM-dd")
            Else

                dtp2.Format = DateTimePickerFormat.Time
                txt2 = Format(dtp2.Value, "hh:mm:ss")
            End If
        Else
            dtp2.Visible = False
            txtContent2.Visible = True
            txt2 = txtContent2.Text
        End If
    End Sub

    '针对查询与日期、时间有关的问题  
    Private Sub cmbField3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbField3.SelectedIndexChanged

        If cmbField3.Text = "上机日期" Or cmbField3.Text = "下机日期" Or cmbField3.Text = "上机时间" Or cmbField3.Text = "下机时间" Then
            dtp3.Format = DateTimePickerFormat.Custom
            dtp3.Visible = True
            txtContent3.Visible = False
            Exit Sub
            If cmbField3.Text = "上机日期" Or cmbField3.Text = "下机日期" Then
                txt3 = Format(dtp3.Value, "yyyy-MM-dd")
                Exit Sub
            ElseIf cmbField3.Text = "上机时间" Or cmbField3.Text = "下机时间" Then
                dtp3.Format = DateTimePickerFormat.Time
                txt3 = Format(dtp3.Value, "hh:mm:ss")
                Exit Sub
            End If
        Else
            dtp3.Visible = False
            txtContent3.Visible = True
            txt3 = txtContent3.Text
        End If

    End Sub

    Private Sub txtContent1_TextChanged(sender As Object, e As EventArgs) Handles txtContent1.TextChanged
        txt1 = txtContent1.Text
    End Sub

    Private Sub txtContent2_TextChanged(sender As Object, e As EventArgs) Handles txtContent2.TextChanged
        txt2 = txtContent2.Text
    End Sub

    Private Sub txtContent3_TextChanged(sender As Object, e As EventArgs) Handles txtContent3.TextChanged
        txt3 = txtContent3.Text
    End Sub

    Private Sub btnToExcel_Click(sender As Object, e As EventArgs) Handles btnToExcel.Click
        Call ImportToExcel.ImportToExcel(dgvGroupCheck)
    End Sub
          2)创建继承的窗体

           

          继承的窗体与创建的模板在于继承的窗体上所有控件为锁着状态,即不可以更改属性。
          继承的窗体在代码层面可以定义自己私有的方法和变量。

          

Public Class frmWorkQuery
    '单例模式  
    Private Shared frmWorkQuery As New frmWorkQuery

    Private Sub New()
        ' 此调用是设计器所必需的。
        InitializeComponent()
        ' 在 InitializeComponent() 调用之后添加任何初始化。
    End Sub
    '单例模式当主窗体点击按钮时获取该窗体的方法
    Public Shared Function Getinstance() As frmWorkQuery
        If frmWorkQuery Is Nothing OrElse frmWorkQuery.IsDisposed Then
            frmWorkQuery = New frmWorkQuery
        End If
        Return frmWorkQuery
    End Function

    Public Overrides Function GetDBName(control As String) As String
        Select Case (control)
            Case "教师"
                Return "UserID"
            Case "级别"
                Return "Level"
            Case "上机日期"
                Return "LoginDate"
            Case "上机时间"
                Return "LoginTime"
            Case "下机日期"
                Return "LogoutDate"
            Case "下机时间"
                Return "LogoutTime"
            Case "机器名"
                Return "Computer"
            Case "状态"
                Return "Online"
            Case "与"
                Return "and"
            Case "或"
                Return "or"
            Case Else
                Return ""
        End Select
    End Function

    Protected Overrides Function GetTable() As String
        GroupQueryInfo.tableName = "WorkLog_Info"
        Return GroupQueryInfo.tableName
    End Function

    Private Sub frmWorkRecord_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cmbField1.Items.Add("教师")
        cmbField1.Items.Add("上机日期")
        cmbField1.Items.Add("上机时间")
        cmbField1.Items.Add("下机日期")
        cmbField1.Items.Add("下机时间")
        cmbField1.Items.Add("机器名")

        cmbField2.Items.Add("教师")
        cmbField2.Items.Add("上机日期")
        cmbField2.Items.Add("上机时间")
        cmbField2.Items.Add("下机日期")
        cmbField2.Items.Add("下机时间")
        cmbField2.Items.Add("机器名")

        cmbField3.Items.Add("教师")
        cmbField3.Items.Add("上机日期")
        cmbField3.Items.Add("上机时间")
        cmbField3.Items.Add("下机日期")
        cmbField3.Items.Add("下机时间")
        cmbField3.Items.Add("机器名")

    End Sub

    Protected Overrides Sub Todatagridview()
        Dim table As New DataTable
        Dim frmGroupQuery As New frmGroupQuery
        Dim FacadeGroupQuery As New Facade.Fe_GroupQueryFacade

        Try
            table = FacadeGroupQuery.GroupQuery(GroupQueryInfo)
            If table.Rows.Count = 0 Then
                table.Clear()
                dgvGroupCheck.DataSource = Nothing
                dgvGroupCheck.Refresh()
                MessageBox.Show("记录为空")
            Else
                dgvGroupCheck.DataSource = table

                dgvGroupCheck.Columns(0).HeaderText = "用户名"
                dgvGroupCheck.Columns(1).HeaderText = "级别"
                dgvGroupCheck.Columns(2).HeaderText = "上机日期"
                dgvGroupCheck.Columns(3).HeaderText = "上机时间"
                dgvGroupCheck.Columns(4).HeaderText = "下机日期"
                dgvGroupCheck.Columns(5).HeaderText = "下机时间"
                dgvGroupCheck.Columns(6).HeaderText = "机器名"
                dgvGroupCheck.Columns(7).HeaderText = "状态"
            End If

        Catch ex As Exception
            MsgBox(ex.Message, vbOKOnly, "提示")
        End Try

    End Sub

End Class

      


        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值