使用DataGridView數據窗口控件,構建用戶快速輸入體驗

使用DataGridView數據窗口控件,構建用戶快速輸入體驗

在“隨風飄散” 博客里面,介紹了一個不錯的DataGridView數據窗口控件《DataGridView數據窗口控件開發方法及其源碼提供下載》,這種控件在有些場合下,還是非常直觀的。因為,在一般要求客戶錄入數據的地方,一般有兩種途徑,其一是通過彈出一個新的窗口,在里面列出各種需要輸入的要素,然后保存的,如下圖所示;

其二就是直接在DataGridView中直接輸入。這兩種方式各有優劣,本文介紹采用該控件實現第二種模式的數據數據。如下圖所示

這種方式,直接通過在DataGridView中下拉列表或者文本框中輸入內容,每列的數據可以聯動或者做限制,實現用戶數據的約束及規范化。

控件只要接受了DataTable的DataSource之后,會根據列的HeadText內容,顯示表格的標題及內容,應用還是比較直觀方便的。

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void BindGridViewData(DataTable dt, DataTable dtNoRelation)
        {organTable = dt;noRelationTable = dtNoRelation;DataGridView dataGridView1 = new DataGridView();this.groupBox1.Controls.Clear();this.groupBox1.Controls.Add(dataGridView1);dataGridView1.Dock = DockStyle.Fill;dataGridView1.CellValueChanged +=new DataGridViewCellEventHandler(organDataGridView_CellValueChanged);dataGridView1.UserDeletedRow += new DataGridViewRowEventHandler(organDataGridView_UserDeletedRow);dataGridView1.AutoGenerateColumns = false;dataGridView1.Rows.Clear();dataGridView1.Columns.Clear();DataGridViewDataWindowColumn col1 = new DataGridViewDataWindowColumn();col1.HeaderText = "機構代碼";col1.Name = "機構代碼";   //下拉列表的數據col1.DataSource = GetDataTable(dtNoRelation);dataGridView1.Columns.Add(col1);DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();col2.HeaderText = "機構名稱";col2.Name = "機構名稱";col2.Width = 300;col2.ReadOnly = true;dataGridView1.Columns.Add(col2);if (dt != null){foreach (DataRow dr in dt.Rows){string value = dr[0].ToString();DataGridViewRow row = new DataGridViewRow();DataGridViewDataWindowCell cell = new DataGridViewDataWindowCell();cell.Value = value;row.Cells.Add(cell);cell.DropDownHeight = 400;cell.DropDownWidth = 300;DataGridViewTextBoxCell cell2 = new DataGridViewTextBoxCell();cell2.Value = dr[1].ToString();row.Cells.Add(cell2);dataGridView1.Rows.Add(row);}}}

由于列之間的數據輸入等相關的影響需要處理,因此控件的處理方式是通過委托函數進行處理,如上面的部分代碼中就是處理這些事件的。

            dataGridView1.CellValueChanged +=new DataGridViewCellEventHandler(organDataGridView_CellValueChanged);dataGridView1.UserDeletedRow += new DataGridViewRowEventHandler(organDataGridView_UserDeletedRow);

由于本例子是通過輸入內容后,及時更新數據庫及控件的顯示,因此需要對該事件進行處理,處理代碼如下所示。

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void organDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {DataGridView organDataGridView = sender as DataGridView;if (!organDataGridView.IsCurrentCellInEditMode)return;#region 顯示關聯機構名稱if (e.RowIndex > -1){if (organDataGridView.CurrentCell.Value == System.DBNull.Value){return;}if (e.ColumnIndex == 0){DataGridViewCell cell = organDataGridView.Rows[e.RowIndex].Cells["機構代碼"];if (cell.Value == null)return;string organCode = cell.Value.ToString();string organName = GetOrganName(organTable, organCode);if (string.IsNullOrEmpty(organName)){organName = GetOrganName(noRelationTable, organCode);}organDataGridView.Rows[e.RowIndex].Cells["機構名稱"].Value = organName;}} #endregionif (this.treeView1.SelectedNode != null){string gjOrganCode = this.treeView1.SelectedNode.Tag.ToString();if (!string.IsNullOrEmpty(gjOrganCode)){string yctOrganCode = organDataGridView.CurrentCell.Value.ToString();OrganCodeMapDAL organMapDal = new OrganCodeMapDAL();organMapDal.UpdateOrganMapData(gjOrganCode, yctOrganCode);}}}private void organDataGridView_UserDeletedRow(object sender, DataGridViewRowEventArgs e){DataGridView organDataGridView = sender as DataGridView;string organCode = e.Row.Cells[0].Value.ToString();OrganCodeMapDAL organMapDal = new OrganCodeMapDAL();organMapDal.DeleteOrganMapData(organCode);}

另外,該控件還提供了一個用于對話框窗體中的復雜下拉列表的數據顯示方式,控件支持內容的過濾檢索,非常方便實用,如下所示

該控件的使用代碼如下所示:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void BindData()
        {            //設置DataWindow屬性this.dataWindow1.PopupGridAutoSize = false;this.dataWindow1.DropDownHeight = 300;this.dataWindow1.DropDownWidth = 240;this.dataWindow1.FormattingEnabled = true;this.dataWindow1.sDisplayField = "車輛編碼,車牌號碼";this.dataWindow1.sDisplayMember = "車輛編碼";this.dataWindow1.sValueMember = "車輛編碼";this.dataWindow1.SeparatorChar = "|";BusDAL busDal = new BusDAL();DataTable dt = busDal.GetYCTBusTable(this.txtOrganName.Tag.ToString());this.dataWindow1.DataSource = dt;this.dataWindow1.AfterSelector += new EventHandler(dataWindow1_AfterSelector);//必須在DataSource綁定之后設置該屬性this.dataWindow1.RowFilterVisible = true;}//選擇完下拉表格后執行的事件private void dataWindow1_AfterSelector(object sender, EventArgs e){}
posted on 2015-06-12 20:14?電子靈魂 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/wordgao/p/4572483.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257182.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pip安裝

下載pip安裝包,解壓。復制到C:\Users\administrator\下,用cmd打開當前文件夾,用Python安裝, Python setup.py install 安裝完之后記得把Python根目錄下的scripts也放在環境變量里。 以上是我pip安裝的成功例子,可能不…

深入剖析授權在WCF中的實現[共14篇]

I、身份(Identity)與安全主體(Security Principal) 從兩個重要的概念談起:Identity與Principal[上篇] 從兩個重要的概念談起:Identity與Principal[下篇] WCF的三種授權模式 II、Windows用戶組授權 基于Wind…

sqlserver 查看鎖表,解鎖

查看被鎖表: 代碼如下 復制代碼 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_typeOBJECT spid 鎖表進程 tableName 被鎖表名 [more] 解鎖: 創建一個臨時Table 代碼如下…

json2.js參考

json2.js使用參考 json2.js提供了json的序列化和反序列化方法&#xff0c;能夠將一個json對象轉換成json字符串&#xff0c;也能夠將一個json字符串轉換成一個json對象。<html><head><script type"text/javascript" src"jquery.js"><…

手把手教你用1行代碼實現人臉識別 -- Python Face_recognition

2019獨角獸企業重金招聘Python工程師標準>>> 環境要求&#xff1a; Ubuntu17.10Python 2.7.14環境搭建&#xff1a; 1. 安裝 Ubuntu17.10 > 安裝步驟在這里 2. 安裝 Python2.7.14 (Ubuntu17.10 默認Python版本為2.7.14) 3. 安裝 git 、cmake 、 python-pip # 安裝…

pip安裝的庫導入pycharm中

用pip安裝了一些庫&#xff0c;但pycharm中卻沒有&#xff0c;解決方法是

javascript數組淺談1

最近心血來潮要開始玩博客了&#xff0c;剛好也在看數組這塊內容&#xff0c;第一篇就只好拿數組開刀了&#xff0c;自己總結的&#xff0c;有什么不對的地方還請批評指正&#xff0c;還有什么沒寫到的方面也可以提出來我進行完善&#xff0c;謝謝~~ 首先&#xff0c;大概說說數…

一個關于解決序列化問題的編程技巧

在前一篇文章中我曾經說過&#xff0c;現在正在做一個小小的框架以實現采用統一的API實現對上下文&#xff08;Context&#xff09;信息的統一管理。這個框架同時支持Web和GUI應用&#xff0c;并支持跨線程傳遞和跨域傳遞&#xff08;這里指在WCF服務調用中實現客戶端到服務端隱…

踩坑之路anaconda創建虛擬環境

渾渾噩噩的過了三年渣碩生涯&#xff0c;雖然說自己是搞圖像的&#xff0c;但基本是一些機器視覺的東西&#xff0c;最近突然想好好搞搞深度學習這方面&#xff0c;想著那就先搭搭環境跑個demo吧&#xff0c;經歷了好多莫名其妙的踩坑操作&#xff0c;demo跑的終于沒bug了&…

IP多播技術及其應用

隨著全球互聯網&#xff08;Internet&#xff09;的迅猛發展&#xff0c;上網人數正以幾何級數快速增長&#xff0c;以因特網技術為主導的數據通信在通信業務總量中的比列迅速上升&#xff0c;因特網業務已成為多媒體通信業中發展最為迅速、競爭最為激烈的領域。Internet網絡傳…

【轉載】惱人的函數指針(一)

本文轉載自: http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html#undefined> 這篇是為了加深記憶所寫。發現&#xff0c;很多知識若不經過反復的琢磨和動手實踐&#xff0c;是很難記得住的。 1&#xff09; 函數指針的初始化。 函數如下&#xff1a; int Com…

dns服務器未響應

昨天還好好的&#xff0c;今天打開電腦顯示DNS服務器為響應。 解決辦法&#xff1a;右擊電腦下方圖標欄——打開Windows任務管理器——服務——服務&#xff08;s&#xff09;——找到DNS client和DHCP client——右擊重啟

php分頁原理

<?php 1.分頁原理所需數據&#xff1a; 總記錄數&#xff1a; $records mysql_num_rows() 每頁顯示&#xff1a; $pagesize 人為定義10 總頁數&#xff1a; $pages $records/$pagesize 當前頁&#xff1a; $page 自己選擇2.分頁的sql語句&#xff1a; SELECT * F…

從客戶端(CourseIssueContent=P財務審計師崗位認證招生簡章BR...)中檢測到有潛在危險的 Request.Form 值。...

說明: 請求驗證過程檢測到有潛在危險的客戶端輸入值&#xff0c;對請求的處理已經中止。該值可能指示危及應用程序安全的嘗試&#xff0c;如跨站點的腳本攻擊。通過在 Page 指令或 配置節中設置 validateRequestfalse 可以禁用請求驗證。但是&#xff0c;在這種情況下&#xff…

ubuntu安裝pytorch鏡像修改及下載

ubuntu安裝pytorch鏡像修改及下載 下載pytorch下載太慢&#xff0c;搞了很長時間&#xff0c;終于改好鏡像能快速下載了&#xff0c;記錄以下。 1.在/home/用戶名/ 下找到/.condarc 文件&#xff0c;可能需要你右擊鼠標顯示隱藏文件才能顯示&#xff0c; 2.把內容修改為清華等鏡…

R--線性回歸診斷(一)

線性回歸診斷--R 【轉載時請注明來源】&#xff1a;http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 無畏未來 作為一個初學者&#xff0c;水平有限&#xff0c;歡迎交流指正。 在R中線性回歸&#xff0c;一般使用lm函數就可以得到線性回歸模型&#xff0c;但是得到的模型…

CSS屬性(根據繼承性分為兩類)

一、可繼承屬性 1》所有標簽可繼承&#xff1a; visibility:行高 cursor: 2》內聯標簽可繼承&#xff1a; line-height:行高 color:文字顏色 font-family:文字字體 font-size:文字大小 font-weight:文字加粗 text-decoration:文字下劃線 3》塊級標簽可繼承&#xff1a; text-in…

妙趣橫生的算法--棧和隊列

棧 棧的特點是先進后出&#xff0c;一張圖簡單介紹一下。 #include "stdio.h" #include "math.h" #include "stdlib.h" #define STACK_INIT_SIZE 20 #define STACKINCRE…

win10系統開不了機

電腦裝了雙系統&#xff0c;從ubuntu切回win10系統后&#xff0c;win10系統開不了機&#xff0c;一直轉圈&#xff0c;修復結果是什么C:\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt問題&#xff0c;是了網上的常用方法都沒成功。 最后我的解決方案&#xff1a;強制關機后開機…

Android SDK打包

2015年6月18日 14:38:49 星期四 eclipse: 1. 將寫好的代碼上傳版本庫 2. 刪除 /bin/* 3. eclipse->project->clean... 4. 上一步自動生成 /bin/xx.jar 5. 復制/bin/xx.jar 到 /libs/xx.jar 6. 刪除 /src/* 7. 連同demo和剛才的工程文件夾壓縮給到對方(這樣可以避免包命…