本期概述
前幾期中,我們實現了使用者對系統資料記錄的基本操作-增刪改查, 由於資料量不是很多,我們可以輕易的找到我們所需要操作的記錄;但是一旦資料量多起來,是否還能方便的找到我們想要操作的資料呢?這一期我們一起來實現一個功能-資料搜尋.
原理
主要原理是 使用SQL模糊查詢語句 select * from 表名 where 欄位名 like '%輸入的內容%' 對庫內相應的欄位進行模糊查詢;
通過 擷取文字框輸入的內容 與 資料庫中各欄位下的內容 進行一一匹配,如果輸入的內容 被某個欄位下的儲存格的內容所包含或者相同,則顯示該列內容.
這裡使用了 單個欄位 模糊搜尋相關資訊的查詢語句 select * from 表名 where "選擇的單個欄位" like '%輸入的內容%' 以及
全欄位 模糊搜尋資訊的查詢語句 select * from 表名 where (欄位名1 like '%輸入的內容%')or(欄位名2 like '%輸入的內容%')....;
介面設計
首先,我們需要在之前的 電影記錄的管理介面FrmManager 增加一個查詢文字框(name:txtDataforQuery) 和一個combox下列條(name:cmbforfieldSelecting)
代碼如下(這裡代碼僅限於資料搜尋功能,如果需要查看其他功能代碼 請看這裡)
private void txtDataforQuery_TextChanged(object sender, EventArgs e){ string sql = ""; if (txtDataforQuery.Text.Trim() == "") { //執行查詢語句 sql = "select * from Record"; } else if (seletedValue == "全域搜尋" || cmbforTypeSelecting.Text == "全域搜尋") { //全欄位搜尋 sql = "select * from Record where(Id like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Name like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Director like'%" + txtDataforQuery.Text.Trim() + "%')or(Date_Released like'%" + txtDataforQuery.Text.Trim() + "%')"; } else if (seletedValue == "Id" || seletedValue == "Movie_Name" || seletedValue == "Movie_Director" || seletedValue == "Date_Released") { //通過相應的欄位進行搜尋 sql = "select * from Record where " + seletedValue + " like '%" + txtDataforQuery.Text.Trim() + "%'"; } SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvManager.DataSource = dt;}
這裡所做的資料搜尋,是通過文字框的TextChanged 事件來自動擷取 輸入的文字 同時與 資料庫中相應欄位下的資料相匹配,如果輸入的資料被資料庫包含或者相同則顯示出來.
//當系統載入的時候自動顯示DataGridView的資料private void FrmManager_Load(object sender, EventArgs e){ //調用重新整理資料的方法 Refresh(); cmbforTypeSelecting.Text = "全域搜尋"; cmbforTypeSelecting.Items.Add("全域搜尋"); cmbforTypeSelecting.Items.Add("編號"); cmbforTypeSelecting.Items.Add("電影名稱"); cmbforTypeSelecting.Items.Add("導演"); cmbforTypeSelecting.Items.Add("發行時間");}string seletedValue;private void txtDataforQuery_TextChanged(object sender, EventArgs e){ string sql = ""; if (txtDataforQuery.Text.Trim() == "") { //執行查詢語句 sql = "select * from Record"; } else if (seletedValue == "全域搜尋" || cmbforTypeSelecting.Text == "全域搜尋") { //全欄位搜尋 sql = "select * from Record where(Id like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Name like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Director like'%" + txtDataforQuery.Text.Trim() + "%')or(Date_Released like'%" + txtDataforQuery.Text.Trim() + "%')"; } else if (seletedValue == "Id" || seletedValue == "Movie_Name" || seletedValue == "Movie_Director" || seletedValue == "Date_Released") { //通過相應的欄位進行搜尋 sql = "select * from Record where " + seletedValue + " like '%" + txtDataforQuery.Text.Trim() + "%'"; } SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvManager.DataSource = dt;}private void cmbforTypeSelecting_SelectedIndexChanged(object sender, EventArgs e){ string strSelected = cmbforTypeSelecting.Text; switch (strSelected) { case "全域搜尋": seletedValue = "全域搜尋"; break; case "編號": seletedValue = "Id"; break; case "電影名稱": seletedValue = "Movie_Name"; break; case "導演": seletedValue = "Movie_Director"; break; case "發行時間": seletedValue = "Date_Released"; break; default: seletedValue = "全域搜尋"; break; }}
同理,我們在 日誌查詢介面 也做一個 記錄搜尋.
介面新增按鈕如下 輸入文字框name:txtlogQuery 搜尋按鈕name:btnlogQuery
代碼如下(如想看本介面的其他功能 請看這裡)
//日誌查詢private void btnlogQuery_Click(object sender, EventArgs e){ //初始化 showSql語句 string showSql = ""; ///如果文字框txtQuery 輸入的內容為空白值 if (txtlogQuery.Text.Trim() == "") { //顯示所有資料 showSql = "select * from Log"; } else { //否則 進行 全域搜尋 將文字框裡的內容與 各欄位 進行 匹配 showSql = "select * from Log where(Id like'%" + txtlogQuery.Text.Trim() + "%')or(User_Name like'%" + txtlogQuery.Text.Trim() + "%')or(Situation like'%" + txtlogQuery.Text.Trim() + "%')or(Time like'%" + txtlogQuery.Text.Trim() + "%')"; } SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(showSql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvLog.DataSource = dt;}
運行測試(管理介面搜尋測試)
1.如果不搜尋(預設狀態內容)
2.如果什麼都不選 預設為全域搜尋
3.通過選擇欄位 搜尋一
4.通過選擇欄位 搜尋二
5.選擇全域搜尋
效果測試(日誌查看介面搜尋)
1.未搜尋 預設內容
2.全域搜尋一
3.全域搜尋二
這樣我們的資料搜尋(模糊查詢)功能就做好了.下一期,我們一起學習下使用者分類功能(將系統使用者劃分為管理員和普通使用者2類).
附上原始碼
MovieRecordManagementSystem06.zip
相關推薦 [點此查看目錄]
- C#簡易電影記錄管理系統:開發一[使用者登入]
- C#簡易電影記錄管理系統:開發二[增刪改查]
- C#簡易電影記錄管理系統:開發三[密碼修改]
- C#簡易電影記錄管理系統:開發四[日誌查看]
- C#簡易電影記錄管理系統:開發五[使用者註冊]
- C#簡易電影記錄管理系統:開發七[使用者分類]
- C#簡易電影記錄管理系統:開發八[資料備份]
- C#簡易電影記錄管理系統:開發九[資料恢複]
- C#簡易電影記錄管理系統:完結篇[許可權分配]