使用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

使用DataGridView数据窗口控件,构建用户快速输入体验相关推荐

  1. 数据窗口控件的函数Describe()

    Describe()  功能:返回数据窗口控件结构方面的指定信息包括DataWindow   对象以及数据窗口  对象中其他对象的属性取值数据窗口中的每个列每个标题等等都是对象各自都有一  组描述其特 ...

  2. pb数据窗口控件OLE

    OLE自动化是不同应用程序之间进行通讯的一个标准. OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE ...

  3. win32 20子窗口控件的代码

    汇编代码: ;>>>>>>>>>>>>>>>>>>>>>>>& ...

  4. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...

    个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...

  5. (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面...

    http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...

  6. PYQT5(13)-基本窗口控件-拖曳与剪贴板

    Drag与Drop 为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成. 基于MIME类型(Multipurpose Internet Mail Extension, ...

  7. 《Windows程序设计》读书笔九 子窗口控件

    第九章 子窗口控件 子窗口可以作为控制屏幕图形显示,响应用户输入,以及在有重要输入事件的时候通知另一窗口. 标准子窗口控件,按钮,复选框,编辑框,列表框,组合框,文本字符串和滚动条. 可以使用Crea ...

  8. 【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

    前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名.常用的子窗口控件有按钮BUTTON.组合框COMBOBOX.编辑框EDIT.列表框LIS ...

  9. 实战PyQt5: 052-停靠窗口控件QDockWidget

    QDockWidget简介 在很多桌面应用软件中,比如Qt的C++ IDE集成开发环境Qt Creater, 宇宙第一集成开发环境Visual Studio等工程软件,都使用了停靠窗口布局,这样做有一 ...

最新文章

  1. 函数计算 Python 连接 SQL Server 小结
  2. 《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.4 统计学
  3. 服务器zip解压php,服务器端解压缩zip的脚本
  4. 简单的Flash GUI工具(Simple Flash GUI Tool)
  5. linux parrot 中文_parrot linux vi/vim命令
  6. 图形界面编程成就了C++
  7. 量化研究: Julia还是Matlab?
  8. 自制全铝CNC雕刻机全过程(完工篇)
  9. 2018年计算机网络考研真题
  10. Android打造自定义通用popWindow
  11. comsol3.5 软件下载
  12. Unity3D新手入门教程 (b站阿发) 总结框架笔记
  13. uniapp密码输入框
  14. python打开xls文件报错_python处理excel文件(xls和xlsx)
  15. 利用div实现遮罩层效果
  16. ARM指令集【 PUSH \POP】【跳转B\BL\BX\BLX \BXJ】【数据操作LDR\LDRB\LDRH\LDM\STR\STRB\STRH\STM】【移位LSL/LSR/ASL/ASR】
  17. 牛年第一瓜!阿里女员工被骗500多万!初中文化水平男子,滴滴开豪车,诈骗4000多万被判无期!...
  18. FPGA和CPLD的区别
  19. 刷脸支付是顺应时代和科技发展趋势的创新
  20. RTX4070ti-40系列显卡配置pytorch深度学习环境过程

热门文章

  1. python编程教程if_Python编程:从入门到实践——【作业】——第五章(if语句)...
  2. c语言自动按键脚本,C语言键盘控制走迷宫小游戏
  3. php如何加网址链接,怎么给一个PHP密码访问页面加超链接
  4. 数学--数论--HDU 12151七夕节
  5. 数学--数论--四大定理之威尔逊定理
  6. Linux更改主机名称(hostname)和设置DNS解析以及设置IP
  7. C++笔记——malloc基本用法
  8. azure_Azure ML算法备忘单
  9. 机器学习:贝叶斯和优化方法_Facebook使用贝叶斯优化在机器学习模型中进行更好的实验
  10. seaborn 教程_使用Seaborn进行数据可视化教程