扩展 DataGridView 的功能(二)

摘要:
=null&&CurrentCell.OwningColumnisDataGridViewComboBoxColumnEx){DataGridViewComboBoxColumnExcol=CurrentCell.OwningColumnasDataGridViewComboBoxColumnEx;//修改组合框的样式if(col.DropDownStyle!

二、加入可以输入文字的 DataGridViewComboBoxCell

DataGridView 的功能确实很强大,要实现在 grid 中加入 ComboBox , 只需要将grid列的类型改为DataGridViewComboBoxColumn 即可

DataGridViewComboBoxColumn 也是从DataGridViewColumn 中继承过来的

publicclassDataGridViewComboBoxColumn:DataGridViewColumn

在 Combobox 中加入选项值也是很简单的,不在赘述。

但系统自带的DataGridViewComboBoxColumn 有个致命的缺点,就是它的DropDownStyle 默认是ComboBoxStyle.DropDownList,也就是

说下拉列表只能选择,不能输入文字,这样就极其不爽了,所以我们现在就要来扩展这个功能

定义新的 columns类, 当然要继承自DataGridViewComboBoxColumn

///<summary>///可修改DropDownStyle的DataGridViewComboBoxColumn
///</summary>

publicclassDataGridViewComboBoxColumnEx:DataGridViewComboBoxColumn

这个类只需要添加了一个属性

DropDownStyle 属性
///<summary>///控制组合框的外观和功能
///</summary>[Description("控制组合框的外观和功能"),DefaultValue(ComboBoxStyle.DropDownList)]
publicComboBoxStyleDropDownStyle
{
get{returndropDownStyle;}
set{dropDownStyle=value;}

因为主要的功能都是在 DataGridViewEx 中实现的, 呵呵

回到 DataGridViewEx 中, 重写OnEditingControlShowing 方法,看字面意思就知道,这个方法是在 grid 的任何“编辑控件”显示时调用

看到这个我想大家都明白了, 我们只要在 ComboBox 控件显示出来时修改它的样式即可

protectedoverridevoidOnEditingControlShowing(DataGridViewEditingControlShowingEventArgse)
{
if(CurrentCell!=null&&CurrentCell.OwningColumnisDataGridViewComboBoxColumnEx)
{
DataGridViewComboBoxColumnExcol
=CurrentCell.OwningColumnasDataGridViewComboBoxColumnEx;
//修改组合框的样式if(col.DropDownStyle!=ComboBoxStyle.DropDownList)
{
ComboBoxcombo
=e.ControlasComboBox;
combo.DropDownStyle
=col.DropDownStyle;
combo.Leave
+=newEventHandler(combo_Leave);
}
}
base.OnEditingControlShowing(e);

}

上面可以看到, 修改了样式后,还需要为 ComboBox 控件绑定一个事件,这是为了能在 ComboBox 失去焦点时更新 Cell 的值

///<summary>///当焦点离开时,需要将新输入的值加入到组合框的Items列表中
///</summary>///<paramname="sender"></param>///<paramname="e"></param>voidcombo_Leave(objectsender,EventArgse)
{
ComboBoxcombo
=senderasComboBox;
combo.Leave
-=newEventHandler(combo_Leave);
if(CurrentCell!=null&&CurrentCell.OwningColumnisDataGridViewComboBoxColumnEx)
{
DataGridViewComboBoxColumnExcol
=CurrentCell.OwningColumnasDataGridViewComboBoxColumnEx;
//一定要将新输入的值加入到组合框的值列表中
//否则下一步给单元格赋值的时候会报错(因为值不在组合框的值列表中)col.Items.Add(combo.Text);
CurrentCell.Value
=combo.Text;
}

}

OK了, 很简单, 所有的工作都完成了, 只需要创建一个 DataGridViewComboBoxColumnEx 列,并将 DropDownStyle 属性设置为 DropDown,

就可以在 ComboBox 中输入文字了

效果图

扩展 DataGridView 的功能(二)第1张

代码下载

免责声明:文章转载自《扩展 DataGridView 的功能(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows 服务实现定时任务调度(Quartz.Net)C#开发GIS应用简明教程(三)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

多个datagridview之间互相传值

 一个winform程序,有两个窗体,一个是住窗体,一个是子窗体。主窗体中有一个button按钮和一个datagridview控件。点击button按钮弹出子窗体,子窗体如图:这其中涉及到两张表,一张是生产产品的供应商信息表,一张是产品信息表。主窗体查询的是供应商信息表,子窗体左边的datagridview查询的是产品信息表。当点击中间的“=>”按钮...

DataGridView的DataGridViewComboBoxColumn列点击一次

Winform中的DataGridView数据绑定控件有时会用到ComboBox列,想要显示ComboBox列的内容需要点击两到三次才可以。这使操作变得很麻烦,降低了易用性,尤其是在程序部署在一些小型设备或者触摸屏设备上时,则更为不便。下面介绍两种方法解决这个问题。 首先,我们创建一个Windows应用程序,在窗体中拖拽一个DataGridView控件,命...

将Datagridview中的数据导出至Excel中

    首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Data.SqlClient         最后建立一个ImportToExcel的函数,函数代码如下: ''' <summary>...

DataGridView很详细的用法

DataGridView很详细的用法  一、 DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null) // 取得当前单元格内容 Cons...

ADO.NET复习

目录 ADO.NET ADO.NET思维导图 命名空间 常用类介绍 Connection 类概述 Command 类概述 DataReader 类概述 DataAdapter 类概述 DataSet 类概述 DataTable DataRow类 DataColumn 类 DataSet:更新数据库(SqlCommandBuilder)...

C#winform解析marc显示在datagridview中以及marc卡片显示

结果显示:marc显示: 卡片显示: 程序一个类: public class MARC { #region 界面上要显示的元素 public string ztm = "";//正题名 public string ftm = "";//副题名 public string fcm = "";//分册(辑)名 public string fch = "";...