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 ...
随机推荐
- SQL Server技术问题之存储过程与sql语句的优缺点
优点: 1. 允许模块化程序设计.2.可维护性高,只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储过程可独立于程序源代码而单独修改,而不需要更改.测试以及重新部署程序集 ...
- Mysql的“Limit”操作
Limit操作: ,; #返回第6-15行数据 ; #返回前5行 ,; #返回前5行 性能优化: 基于MySQL5.0中limit的高性能,我对数据分页也重新有了新的认识.测试SQL语句1: Sele ...
- [Perl]抓取个人的所有闪存+格式化保存为文本
以下代码保存为utf8文本格式 环境:ActivePerl v5.16 built for MSWin32-x86 两个要调整的地方: for my $i (17..45) { 这里改成自己对应的页 ...
- Linux - Ubuntu下JDK配置
系统版本: ubuntu 14.04 x64JDK版本: jdk-8u60-linux-x64 1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应的JDK文件,我这里下 ...
- 【基础】Html跨域跳转问题整理
今天遇到一个问题,是有关 跨域跳转问题,涉及到知识比较基础. 具体问题是: A站点的 PageA (Post数据)到 B站点的 PageB,PageB接受到后Redirect到B站的 PageC: ...
- android图片拖动缩放
这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助.android 大图片拖拽缩放 这篇就不做过多介绍了,直接上源码: public class ...
- Aspose.Word 操作word表格的行 插入行 添加行
rows.insert或rows.add前row必须有单元格cell private void button3_Click(object sender, EventArgs e) { ...
- C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用
工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个 ...
- php页面输出时,js设置input框的选中值
/* 设置表单的值 */ function setValue(name, value) { var first = name.substr(0, 1), input, i = 0, val; if ( ...
- java多线程(二)——锁机制synchronized(同步方法)
synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...