日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET重构(四):窗体继承+模板方法,完美实现组合查询

發(fā)布時(shí)間:2023/12/13 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET重构(四):窗体继承+模板方法,完美实现组合查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)讀:在機(jī)房重構(gòu)中,有好些個(gè)查詢都是大同小異,最為顯著的就是組合查詢了。怎樣給自己省事兒,相同的東西能不能重復(fù)利用,就成了一個(gè)現(xiàn)實(shí)的問題。第一遍做機(jī)房的時(shí)候,使用的更多的是:復(fù)制+粘貼。學(xué)習(xí)了設(shè)計(jì)模式后,可以用模板方法解決。這篇文章,就通過窗體繼承和模板方法,實(shí)現(xiàn)組合查詢。


觀點(diǎn):組合查詢?cè)跈C(jī)房中有3中情況,其實(shí),組合查詢完全可以看到是一種查詢情況。


一、窗體繼承的使用


1,首先建立一個(gè)父窗體

2,添加一個(gè)新項(xiàng)

3,選擇繼承窗體

4,確定后,一個(gè)新的繼承窗體就好了。

二、模板方法的使用


備注:定義一個(gè)組合查詢的實(shí)體,方便傳參

1,首先在U層寫入基礎(chǔ)方法和傳參

<span style="font-size:18px;">Public Class FrmGroupQueryPublic enGroupQuery As New Model.GroupQueryM '定義一個(gè)實(shí)體參數(shù)Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btnQuery.Click'第一行組合關(guān)系為空If cmbRelation1.Text = "" Then'判斷第一行控件內(nèi)容是否為空If cmbField1.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation1.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent1.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")End IfEnd If' 當(dāng)?shù)谝粋€(gè)組合關(guān)系不為空時(shí) If cmbRelation1.Text <> "" ThenIf cmbField1.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation1.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent1.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")ElseIf cmbField2.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation2.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent2.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")End IfEnd If' 當(dāng)?shù)诙€(gè)組合關(guān)系不為空時(shí) If cmbRelation2.Text <> "" ThenIf cmbField1.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation1.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent1.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")ElseIf cmbField2.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation2.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent2.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")ElseIf cmbField3.Text = "" ThenMsgBox("請(qǐng)輸入字段名")ElseIf cmbOperation3.Text = "" ThenMsgBox("請(qǐng)輸入操作符")ElseIf txtContent3.Text = "" ThenMsgBox("請(qǐng)輸入要查詢的內(nèi)容")End IfEnd If'給實(shí)體層傳參Dim enGroupQuery As New Model.GroupQueryMenGroupQuery._field1 = GetDBName(cmbField1.Text.Trim())enGroupQuery._field2 = GetDBName(cmbField2.Text.Trim())enGroupQuery._field3 = GetDBName(cmbField3.Text.Trim())enGroupQuery._operate1 = cmbOperation1.Text.Trim()enGroupQuery._operate2 = cmbOperation2.Text.Trim()enGroupQuery._operate3 = cmbOperation3.Text.Trim()enGroupQuery._content1 = txtContent1.Text.Trim()enGroupQuery._content2 = txtContent2.Text.Trim()enGroupQuery._content3 = txtContent3.Text.Trim()enGroupQuery._relation1 = GetDBName(cmbRelation1.Text.Trim())enGroupQuery._relation2 = GetDBName(cmbRelation2.Text.Trim())enGroupQuery.GetTable = GetTable() '通過函數(shù)的返回值給參數(shù)賦值'給B層GroupQuery方法傳遞參數(shù)Dim FGroupQuery As New Facade.GroupQuertFADim table As DataTabletable = FGroupQuery.GroupQuery(enGroupQuery)If table.Rows.Count = 0 ThenMsgBox("沒有記錄,請(qǐng)重新設(shè)置查詢條件", vbOKOnly, vbExclamation)DataGridView1.DataSource = NothingElseDataGridView1.DataSource = FGroupQuery.GroupQuery(enGroupQuery)End IfEnd Sub' 定義虛函數(shù)GetDBName,獲取不同數(shù)據(jù)庫(kù)的字段名 Protected Overridable Function GetDBName(ByVal control As String) As StringReturn ""End Function' 定義虛函數(shù)GetDBName,獲取不同數(shù)據(jù)庫(kù)的表名 Protected Overridable Function GetTable() As StringReturn ""End FunctionPrivate Sub Button2_Click_1(sender As Object, e As EventArgs) Handles btnExit.ClickMe.Close()End Sub'組合關(guān)系一不為空后,顯示第二行查詢條件Private Sub cmbRelation1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation1.SelectedIndexChangedcmbField2.Enabled = TruecmbOperation2.Enabled = TruecmbRelation2.Enabled = TruetxtContent2.Enabled = TrueEnd Sub'組合關(guān)系二不為空后,顯示第三行查詢條件Private Sub cmbRelation2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbRelation2.SelectedIndexChangedcmbField3.Enabled = TruecmbOperation3.Enabled = TruetxtContent3.Enabled = TrueEnd SubEnd Class</span>


2,在B層,對(duì)D層數(shù)據(jù)庫(kù)的查詢結(jié)果做出處理

<span style="font-size:18px;">Imports Charge.IDAL Imports Charge.Model Public Class GroupQueryBLL''' <summary>''' 根據(jù)組合查詢D層的返回結(jié)果,判斷是否有值''' </summary>''' <param name="enGroupQuery"></param>''' <returns>沒有值,不返回任何東西,有,就返回信息</returns>''' <remarks></remarks>Public Function GroupQueryStudent(ByVal enGroupQuery As Model.GroupQueryM) As DataTableDim factory As New Factory.CreateFactoryDim IGroupQuery As IGroupQuery = factory.CreateGroupQueryDim table As DataTable = IGroupQuery.GroupQuery(enGroupQuery)'檢查D層返回的數(shù)據(jù)表中是否有數(shù)據(jù)If table.Rows.Count = 0 ThenReturn NothingElseReturn tableEnd IfEnd Function End Class</span>

3,在D層對(duì)數(shù)據(jù)進(jìn)行查詢

<span style="font-size:18px;">/********************************************** '類名:SQLGroupQuery '命名空間:ChargeDAL '創(chuàng)建時(shí)間:2015/1/5 20:58:39 '創(chuàng)建人:HXX '修改時(shí)間: '修改人: '版本號(hào):4.0.30319.18449 '說明:實(shí)現(xiàn)組合條件的 '版權(quán):HHX '/********************************************** Imports System.Data.SqlClient Imports System.Data Imports ChargePublic Class SQLGroupQuery : Implements IDAL.IGroupQuery''' <summary>''' 根據(jù)設(shè)置的條件,進(jìn)行信息查詢''' </summary>''' <param name="enGroupQuery"></param>''' <returns>返回查詢結(jié)果信息的集合</returns>Public Function GroupQuery(enGroupQuery As Model.GroupQueryM) As DataTable Implements IDAL.IGroupQuery.GroupQueryDim strSQL As String = "QueryGroup" '調(diào)用存儲(chǔ)過程 Dim prams As SqlParameter() = {New SqlParameter("@cmbField1", enGroupQuery._field1),New SqlParameter("@cmbField2", enGroupQuery._field2),New SqlParameter("@cmbField3", enGroupQuery._field3),New SqlParameter("@cmbOperation1", enGroupQuery._operate1),New SqlParameter("@cmbOperation2", enGroupQuery._operate2),New SqlParameter("@cmbOperation3", enGroupQuery._operate3),New SqlParameter("@txtContent1", enGroupQuery._content1),New SqlParameter("@txtContent2", enGroupQuery._content2),New SqlParameter("@txtContent3", enGroupQuery._content3),New SqlParameter("@cmbRelation1", enGroupQuery._relation1),New SqlParameter("@cmbRelation2", enGroupQuery._relation2),New SqlParameter("@tableName", enGroupQuery.GetTable)} '設(shè)置參數(shù)Dim MyHelper As New SqlHelperDim table As New DataTabletable = MyHelper.ExecSelect(strSQL, CommandType.StoredProcedure, prams)Return tableEnd Function End Class</span>

三、在繼承窗體中的應(yīng)用


在繼承窗體中,需要重寫模板父窗體中的方法,關(guān)鍵點(diǎn)有:字段的轉(zhuǎn)換,數(shù)據(jù)表的返回。

<span style="font-size:18px;"> Private Sub FrmOperateWorkLog_Activated(sender As Object, e As EventArgs) Handles Me.Activated'避免一個(gè)窗體多次打開,或者打開多個(gè)操作窗體Dim frm As Form'遍歷打開了的每一個(gè)窗體For Each frm In Application.OpenForms'如果當(dāng)前窗體不是主窗體或者沒有被打開過If frm.Name <> Me.Name And frm.Name <> FrmMain.Name And frm.Name <> FrmLine.Name Then'其他打開的窗體最小化frm.WindowState = 1End IfNextEnd SubPrivate Sub FrmMaintainInfo_Load(sender As Object, e As EventArgs) Handles MyBase.Load'給字段賦值cmbField1.Items.AddRange({"教師", "注冊(cè)日期", "注冊(cè)時(shí)間", "注銷日期", "注銷時(shí)間", "機(jī)器名"})cmbField2.Items.AddRange({"教師", "注冊(cè)日期", "注冊(cè)時(shí)間", "注銷日期", "注銷時(shí)間", "機(jī)器名"})cmbField3.Items.AddRange({"教師", "注冊(cè)日期", "注冊(cè)時(shí)間", "注銷日期", "注銷時(shí)間", "機(jī)器名"})cmbOperation1.Items.AddRange({"=", "<", ">", "<>"})cmbOperation2.Items.AddRange({"=", "<", ">", "<>"})cmbOperation3.Items.AddRange({"=", "<", ">", "<>"})cmbRelation1.Items.AddRange({"與", "或"})cmbRelation2.Items.AddRange({"與", "或"})End Sub'重寫獲得表名方法Protected Overrides Function GetTable() As StringenGroupQuery.GetTable = "TC_WorkLogInfo"Return enGroupQuery.GetTable()End Function'重寫轉(zhuǎn)換成數(shù)據(jù)庫(kù)字段方法Protected Overrides Function GetDBName(control As String) As StringSelect Case (control)Case "教師"Return "UserID"Case "注冊(cè)時(shí)間"Return "OnTime"Case "注冊(cè)日期"Return "OnDate"Case "注銷時(shí)間"Return "OffTime"Case "注銷日期"Return "OffDate"Case "機(jī)器名"Return "Computer"Case "或"Return "or"Case "與"Return "and"Case ElseReturn ""End SelectEnd Function End Class </span>

到這里,利用窗體繼承和模板方法進(jìn)行組合查詢就算是實(shí)現(xiàn)了。


四、應(yīng)用說明
1,這里的返回類型都是DataTable,如果將其換為L(zhǎng)ist,則就沒有這么簡(jiǎn)單了。還需要多寫一步(存儲(chǔ)過程中),就像返回查詢表格的參數(shù)一樣,將查詢表格的參數(shù)寫到List中的表。
2,這里D層的查詢是通過調(diào)用的存儲(chǔ)過程,對(duì)存儲(chǔ)過程的使用和理解,將在下一篇博客中詳細(xì)說明。不過,在這里可以替換成一種類型,就像是第一次做機(jī)房時(shí)那樣。例(第一次機(jī)房中):

<span style="font-size:18px;">txtSQL = txtSQL & tiaojian(Trim(cobozd1(0).Text)) & Trim(cobocz1(0).Text) & "'" & Trim(txtnr1.Text) & "'" _& " and " _& tiaojian(Trim(cobozd1(1).Text)) & Trim(cobocz1(1).Text) & " '" & Trim(txtnr2.Text) & "'" _& " and " _& tiaojian(Trim(cobozd1(2).Text)) & Trim(cobocz1(2).Text) & " '" & Trim(txtnr3.Text) & "'"</span>

在這里,也可以將存儲(chǔ)過程,換成一般的文本類型查詢。因?yàn)槭菓?yīng)用的參數(shù)賦值,使用字符拼接的方式,將組合查詢的三個(gè)情況看做是一種情況,也是可行的。

五、個(gè)人感想


學(xué)以致用,學(xué)了還要會(huì)用才行。剛開始學(xué)了設(shè)計(jì)模式的時(shí)候,真的感受不大。但用上了之后,真的覺得很方便。只是在用的過程中有點(diǎn)艱難,不過,把一個(gè)個(gè)的問題解決了,最后實(shí)現(xiàn)了,感覺真的很良好。


轉(zhuǎn)載于:https://www.cnblogs.com/hhx626/p/6010455.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的.NET重构(四):窗体继承+模板方法,完美实现组合查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 夜夜操天天操 | 蜜桃视频成人 | www视频免费在线观看 | 麻豆网站入口 | 日本高清不卡在线观看 | 国产亚洲精品久久久久久无几年桃 | 伊人88 | 国产一区二区 | jzzijzzij亚洲成熟少妇18 欧美www在线观看 | 九九在线精品视频 | 清清草视频 | 人人爽人人爽人人片av | 男女视频免费 | 国产三级三级三级 | 成人福利视频网站 | 啦啦啦视频在线观看 | 超碰国产91| 波多野结衣视频在线看 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品毛片一区 | 日本韩国视频 | 欧美影院一区二区三区 | 中国在线观看视频高清免费 | 性高潮免费视频 | 综合激情四射 | 九九综合九九综合 | 怡红院一区 | 91精品国产高清一区二区三蜜臀 | 国产精品aaa | 男人爽女人下面动态图 | 日韩视频在线观看二区 | 日韩午夜在线 | 欧美激情 在线 | 成年人在线视频免费观看 | 国产小精品 | 爽插 | 国产日韩欧美视频在线 | 波多野结衣在线观看一区 | 国产精品一区二区在线观看 | 国产美女黄网站 | 五月香婷婷 | 天天射天天射 | 韩国三级做爰高潮 | 国模人体一区二区 | 六月婷婷网 | 伊人久久99 | 偷偷操不一样 | 免费看麻豆| 国产精品久久久久久免费观看 | 狠狠干av| 国产吞精囗交久久久 | 亚洲五月婷婷 | 丰满大乳国产精品 | 在线99| 国产黄色片av | 精品国产一区二区三区四区 | 一级片在线视频 | 97视频在线免费观看 | 国产乡下妇女做爰毛片 | 天天操天天插天天射 | 日韩毛片网站 | 影音先锋黄色网址 | 97夜夜操| 国产又爽又黄又嫩又猛又粗 | 99久久精品免费视频 | 国产在线一二三 | 97成人精品视频在线观看 | 激情久久中文字幕 | 日屁视频| 国产精品免费一区二区区 | 色呦呦国产 | 黄色精品一区 | 最新av网址在线观看 | 麻豆chinese新婚xxx | 少妇被又大又粗又爽毛片久久黑人 | 男人的天堂伊人 | 禁断介护av一区二区 | 国产三级第一页 | 国产日韩亚洲 | 日本不卡一区二区三区在线观看 | 亚洲在线成人 | 丰满人妻一区二区三区精品高清 | 99热99热 | 精品在线免费观看 | 少妇高潮大叫好爽喷水 | 欧美久久久久久久久久久久久久 | 国产毛片3| 黄色永久视频 | 冲田杏梨 在线 | 午夜精品久久久久久久久久蜜桃 | 夜夜草网站| 五月婷婷视频 | 国产乱free国语对白 | 青青草97国产精品免费观看 | 草久网 | 老熟女高潮一区二区三区 | 少妇被躁爽到高潮无码人狍大战 | 国产美女永久无遮挡 | 日韩中文字幕精品视频 |