DataGridView单元格内容自动匹配下拉显示
页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件。在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信息,并且单元格处于编辑模式时显示一个查询图标的按钮,点击该按钮也将显示数据库中所有商品信息。 KryptonDataGridView显示控件此处命名为kDGVIndentDetail; 用于下拉显示匹配内容的DataGridView命名为dgv; 、建立一个DataGridView类型的页面变量用于KryptonDataGridView单元格下拉显示匹配结果 //新建变量用于下拉显示的数据控件 DataGridView dgv = new DataGridView(); //保存当前编辑单元格的坐标 private int _colindex;//列索引 private int _rowindex;//行索引 、页面Load事件中设置dgv初始属性和添加一个单元格单击事件,提取为方法: 代码 //设置下拉显示控件的属性 private void _SetDGVDrop() { //初始为不可见并且只读 dgv.Visible = false; dgv.ReadOnly = true; dgv.Height = ; //单元格选择模式为正行选择 dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgv.MultiSelect = false; //只用单行选择 dgv.ColumnHeadersVisible = false; //隐藏列头 //设置列宽 dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dgv.BackgroundColor = Color.FromName("window"); dgv.RowHeadersVisible = false; //隐藏行头 dgv.ScrollBars = ScrollBars.Vertical;//滚动条模式 dgv.AllowUserToAddRows = false; //禁止添加新行 dgv.AllowUserToDeleteRows = false; dgv.AllowUserToOrderColumns = false; dgv.AllowUserToResizeColumns = false; dgv.AllowUserToResizeRows = false; dgv.BackgroundColor = Color.White; //设置单元格边框样式 dgv.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None; dgv.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single; dgv.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; dgv.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; //添加单元格鼠标单击事件 dgv.CellMouseClick += new DataGridViewCellMouseEventHandler(dgv_CellMouseClick); //向明细单显示控件中加入该下拉控件 kDGVIndentDetail.Controls.Add(dgv); } dgv的单元格单击事件: 、数据显示控件kDGVIndentDetail的商品列(colProId)类型为:KryptonDataGridViewTextBoxCell,在列的ButtonSpecs属性中添加一个buttonSpecAny名称为buttonSpecAny4,设置buttonSpecAny4的图片: 、buttonSpecAny4的单击事件中显示下拉显示控件并调用控件的绑定事件: 当单元格为编辑状态时,buttonSpecAny4按钮将显示,点击该按钮下拉控件显示所有数据,点击控件的某一列,将把指定的值赋给当前编辑的单元格(这里只取选中行[“aa”]列的值) 、dgv的绑定方法:(为避免连接数据库,这里使用手工填充数据的方法) 代码 //绑定下拉显示控件 private void BindDGV(string str) { //填充数据源 DataTable dt = new DataTable(); dt.Columns.Add("aa"); dt.Columns.Add("bb"); dt.Columns.Add("cc"); dt.Columns.Add("ee"); DataRow dr = null; for (int i = ; i < ; i++) { dr = dt.NewRow(); dr["aa"] = str + "aa" + i; dr["bb"] = str + "bb" + i; dr["cc"] = str + "cc" + i; dr["ee"] = str + "ee" + i; dt.Rows.Add(dr); } //绑定数据源 dgv.DataSource = dt; } 、现在实现在单元格直接输入内容时自动配备显示数据库中的内容,在kDGVIndentDetail显示控件的EditingControlShowing事件中处理: TextChanged事件中根据用户数据内容动态匹配 代码 void kcell_TextChanged(object sender, EventArgs e) { KryptonDataGridViewTextBoxEditingControl kdgvtbox = (KryptonDataGridViewTextBoxEditingControl)sender; //MessageBox.Show(kdgvtbox.Text); if (kDGVIndentDetail.Columns[kDGVIndentDetail.CurrentCell.ColumnIndex].Name == "colProId") { BindDGV(kdgvtbox.Text); _colindex = kDGVIndentDetail.CurrentCell.ColumnIndex; _rowindex = kDGVIndentDetail.CurrentCell.RowIndex; Rectangle rect = kDGVIndentDetail.GetCellDisplayRectangle(_colindex, _rowindex, false); //设置显示控件的位置 dgv.Left = rect.Left; dgv.Top = rect.Top + kdgvtbox.Size.Height; dgv.Visible = true; } } 、滚动kDGVIndentDetail和改变列宽时,隐藏下拉显示控件 代码 private void kDGVIndentDetail_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) { //隐藏下拉显示控件 dgv.Visible = false; } private void kDGVIndentDetail_Scroll(object sender, ScrollEventArgs e) { //隐藏下拉显示控件 dgv.Visible = false; } 暂且写到这里,还需要在使用中调试修改,下面是效果图: 单击单元格进入编辑模式时,查询按钮显示(放大镜) 输入内容时显示匹配内容: 点击放大镜显示所有内容: 代码 //单元格启用编辑时 private void kDGVIndentDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { //MessageBox.Show(""+sender.GetType().ToString()); KryptonDataGridView kdgv = (KryptonDataGridView)sender; if (e.Control.GetType().Equals(typeof(KryptonDataGridViewTextBoxEditingControl))) //cell类型 { KryptonDataGridViewTextBoxEditingControl kcell = e.Control as KryptonDataGridViewTextBoxEditingControl; //MessageBox.Show(kcell.TextBox.Name); //获取列名 //MessageBox.Show(kdgv.Columns[kdgv.CurrentCell.ColumnIndex].Name); if (kdgv.Columns[kdgv.CurrentCell.ColumnIndex].Name == "colProId")//此列为显示商品代码的列 { //添加按键事件 kcell.TextChanged += new EventHandler(kcell_TextChanged); } } } 代码 private void buttonSpecAny4_Click(object sender, EventArgs e) { //点击可查询 //MessageBox.Show("点击查询:"+buttonSpecAny4.Owner.GetType()); KryptonDataGridViewTextBoxCell kdcell = (KryptonDataGridViewTextBoxCell)buttonSpecAny4.Owner; BindDGV(""); Rectangle rect = kDGVIndentDetail.GetCellDisplayRectangle(kdcell.ColumnIndex, kdcell.RowIndex, false); _colindex = kdcell.ColumnIndex; _rowindex = kdcell.RowIndex; //设置显示控件的位置 dgv.Left = rect.Left; dgv.Top = rect.Top + kdcell.Size.Height; dgv.Visible = true; } 代码 //下拉显示控件单元格双击事件,获得选择值并赋值给当前单元格 void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { DataGridView dgv = (DataGridView)sender; KryptonDataGridView kdgv = (KryptonDataGridView)dgv.Parent; kdgv[_colindex,_rowindex].Value = dgv.CurrentRow.Cells["aa"].Value; //隐藏 KryptonDataGridView dgv.Visible = false; //结束编辑,以显示选择结果值 kDGVIndentDetail.EndEdit(); }
DataGridView单元格内容自动匹配下拉显示的更多相关文章
- NPOI生成单元格(列)下拉框
客户提出能否将导入模板中,课程一列添加下拉框方便选择,不用手输入,以减少输入错误的可能性.于是在网上找了点代码,稍加整理后,形成了以下方案,代码部分: 一:生成课程列表,并放置在excel的单独she ...
- 20161014001 DataGridView 单元格内容 自动计算
private void T_Form_CY_CBD_D_CellValueChanged(object sender, DataGridViewCellEventArgs e) { ...
- Excel单元格内容太多会覆盖遮住下一单元格范围
Excel单元格内容太多会覆盖遮住下一单元格范围分步阅读 Excel中的单元格内容,有着不同的对齐方式.用户可根据自己的需求,在处理数据的时候,自行设置所需要的对齐方式. 当您在处理数据的时候,如果设 ...
- DataGridView 单元格自动填充
在DataGridView单元格中,当输入指定字符时,自动完成填充. 通过 TextBox实现 AutoCompleteMode AutoCompleteMode.Suggest: AutoCompl ...
- WinForm中DataGridView复制选中单元格内容解决方案
WinForm中DataGridView鼠标选中单元格内容复制方案 1.CTR+C快捷键复制 前提:该控件ClipboardCopyMode属性设置值非Disable: 2.鼠标框选,自定义代码实现复 ...
- C# DataGridView在单元格提示里(ToolTip)显示完整的单元格内容
当单元格内容太多时,则会忽略后面的内容 解决方案: 添加Dgv鼠标移到单元格事件时,设置当前单元格的ToolTipText属性内容为当前单元格内容 void From_Load(object send ...
- excel单元格内容拆分
这几天在整理数据,但是数据都在表格的一个单元格中,看起来很不方法,所以在网上找到excel单元格内如拆分的方法,并亲测有效 介绍2种拆分的方法 方法一: (1)在B1输入公式=right(text,[ ...
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- C#实例:datagridview单元格合并
这是替C#微信交流群群友做的一个小实例,目的就是在datagridview选择对应行以后,点击button后获取对应行的ip,并执行相应的操作,其实我觉得这样的话button没必要非放置到datagr ...
随机推荐
- BZOJ1003 物流运输 最短路+DP
1003: [ZJOI2006]物流运输 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条 ...
- Cookie 和 Session 的区别
[[ from 老生常谈session,cookie的区别,安全性 ]] 一,为什么session,cookie经常会有人提到 做web开发的人基本上都会用session和cookie,但是仅仅只是会 ...
- 2015 Multi-University Training Contest 1 - 1002 Assignment
Assignment Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值之 ...
- 快捷获取浏览器(navigator对象)的全部属性
理论: navigator对象包含关于web浏览器的信息,浏览器的类型,版本信息都可以从该对象获取. 属性 说明 appCodeName 浏览器代码说明 appName 浏览器名称 appVe ...
- JMS学习(四) Selector详解
一.前言 在掌握了消息的结构之后,我们接下来看一下JMS的一个重要功能:选择器.有些时候,作为消费者只希望处理自己感兴趣的消息.如果某个消息只有一个消费者,我们可以在让该客户端根据规则来处理自己感兴趣 ...
- HDU 2256 Problem of Precision 数论矩阵快速幂
题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...
- 那一夜,我们..奋笔疾书敲出的--->>库存管理系统
说了会再见,最近好吗?无论你在哪里>也许你在温暖的家,或许你在身在异乡的城市;或许你高高的峰顶放生高歌,或许你还在陡峭的山峰半空努力攀爬.......相信我们都会登上顶峰,"会当凌绝顶 ...
- Python杨辉三角算法
#!/usr/bin/env python # -*- coding: utf-8 -*- def triangles(): n = 1 aboveList = [] while True: if n ...
- 删除单链表倒数第n个节点
基本问题 如何删除单链表中的倒数第n个节点? 常规解法 先遍历一遍单链表,计算出单链表的长度,然后,从单链表头部删除指定的节点. 代码实现 /** * * Description: 删除单链表倒数第n ...
- PlayFramework 1 自定义标签 -- FastTags http://unmi.cc/category/javajee/playframework/
最早是用 HTML 来自定义标签,现在觉得 HTML 写有关逻辑的代码就有点不伦不类了,HTML 里着重是显示代码.前有一篇 PlayFramework 1 模板应用 -- Java 对象扩展 学习 ...