DataGridView编辑

本文详细介绍了DataGridView控件的编辑模式,包括EditOnEnter、EditOnF2等枚举成员,并探讨了如何设置初始状态及自动进入编辑模式。此外,还讨论了在DataGridView中进行数据编辑并保存至数据库的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DataGridViewEditMode 枚举

成员名称

说明

EditOnEnter

当单元格接收到焦点时即可开始编辑。在按 Tab 键在行中横向输入值,或按 Enter 键在列中纵向输入值时,此模式非常有用。

EditOnF2

当单元格获得焦点时按 F2 开始编辑。此模式将选择点放置在单元格内容的末尾。

EditOnKeystroke

当单元格获得焦点时按任意字母数字键开始编辑。

EditOnKeystrokeOrF2

当单元格获得焦点时按任意字母数字键或 F2 开始编辑。

EditProgrammatically

仅在调用 BeginEdit 方法时开始编辑。此枚举由 DataGridView 控件的 EditMode 属性使用。

除 EditProgrammatically 之外,所有 DataGridViewEditMode 值都允许用户通过双击单元格来开始编辑该单元格。

我想实现的效果:

1.刚打开界面时,dataGridView无默认选定单元格,即所有单元格均为白色。

2.点击某个单元格,自动进入编辑状态。

实现方法:

1.在dataGridView1的SelectionChanged (object sender, EventArgs e)事件中写语句:

dataGridView1.BeginEdit(true);(用false也可)

2.在窗体的Load(object sender, EventArgs e)事件中写语句:

dataGridView1.CurrentRow.Selected = false;

dataGridView1.EndEdit();

存在问题:

在离开dataGridView1时,最后选定的单元格仍为蓝色

在使用bindingSource、bindingNavigator+DataGridView修改时会发现,
当你需要保存修改过后的内容,必须将光标指向另外一行,
DataGridView才会将编辑过后的数据提交到数据缓存区,
那么,就会让客户感觉起来很不方便(无法直接点保存更新)
这两天上网查了几个方法,可行,下面列举一下:
一、最常见的解决办法。
使用select(),或者修改当前单元格索引使光标跳到另外一行。
这种方式有其弊端,那就是当你只有一行数据时,这方法就行不通。
只能在你点保存之前,新增一行空数据,然后将光标移向空数据,保存之后再将这行空数据删除。
这种方式实现起来比较麻烦,不利于快速开发。
二、使用EndEdit()方法
这种方法其实仔细看看和上面的方法其实同出一辙,
唯一不同的是,这是系统自带的方式,当然就不会出现上面出现的问题。
不过这里要注意一下,只有在保存之前bindingSource和DataGridView都使用了EndEdit()方法表格内数据才能成功提交。(只用一个是没有效果的。)
三、在网上看到的比较搞笑的方法
SendKeys.Send( "{ENTER} ")
模拟人工输入“回车”
winform,怎样实现在datagridview中直接编辑,然后保存到数据库中?
要求不使用commandbuilder


hncsckr»
以下代码希望对你有所帮助:
//为命令添加参数。
//参数声明开始。
//要指定参数跟本地表中的哪列对应。
//这列指定了数据源,称为源列。SourceColumn
insert.Parameters.Add("@username", SqlDbType.VarChar).SourceColumn = "UserName";
insert.Parameters.Add("@password", SqlDbType.VarChar, 50, "password");
SqlParameter param = new SqlParameter("@email", SqlDbType.VarChar);
param.SourceColumn = "email";
insert.Parameters.Add(param);
insert.Parameters.Add("@remark", SqlDbType.VarChar).SourceColumn = "remark";
insert.Parameters.Add("@account", SqlDbType.Int).SourceColumn = "account";
//参数声明结束
sda.InsertCommand = insert;
SqlCommand update = new SqlCommand(
"update t_user set password=@password,email=@email,remark=@remark,account=@account where username=@username"
, con
);
update.Parameters.Add("@username", SqlDbType.VarChar).SourceColumn = "username";
update.Parameters.Add("@password", SqlDbType.VarChar).SourceColumn = "password";
update.Parameters.Add("@email", SqlDbType.VarChar).SourceColumn = "email";
update.Parameters.Add("@remark", SqlDbType.VarChar).SourceColumn = "remark";
update.Parameters.Add("@account", SqlDbType.Int).SourceColumn = "account";
sda.UpdateCommand = update;
SqlCommand delete = new SqlCommand(
"delete from t_user where username=@username",
con
);
delete.Parameters.Add("@username", SqlDbType.VarChar).SourceColumn = "username";
sda.DeleteCommand = delete;


suosuoyyy»
要想采用Adapter.Update()方法来更新数据的话,无非是构造DeleteCommand、InsertCommand、UpdateCommand,
如果你不用CommandBulider,那就要自己来构造这些Command了

转载于:https://www.cnblogs.com/ewyb/archive/2010/08/31/1813406.html

1. 基类说明 1.1 基类结构图 1.2 基类说明 1.2.1 BaseEditClass BaseEditClass是所有单表编辑功能的基类。BaseEditClass从NSGForm继承,以处理统一的界面和字体风格。 BaseEditClass抽象出了编辑类功能通用的方法并定义为基类方法,以便子类继承,并增加自己的代码。  自定义属性 名称 说明 DataTable 功能所编辑的数据表 DataState 功能所处的状态:浏览(dsBrowse)、新增(dsInsert)、编辑(dsEdit) BatchSave 是否批量提交数据表,默认为False DeleteWarn 在删除记录时是否提示,默认为True  自定义方法 名称 说明 FormInit 在FormLoad时被调用,具体功能中可重载该方法添加自定义的初始化代码 PostData 具体功能中需要重载该方法,并调用具体的TableAdapter.Update(row),以保存数据至数据库。 RefreshData 统一的刷新数据表过程,具体功能中需要重载该方法,并调用具体的TableAdapter.Fill(DataTable),以查询数据 DataValid 统一的数据验证方法,在保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 NewRecord 在新增数据时被调用,在具体过程中可重载该方法添加自定义的新增记录默认值 SaveData 保存数据的方法,具体功能中调用该过程保存数据 DeleteData 删除数据的方法,具体功能中调用该过程删除数据 CancelData 取消数据修改的方法,具体功能中调用该过程取消数据修改 1.2.2 BaseGridEdit BaseGridEdit是所有直接使用DataGridView进行编辑的功能的基类。BaseGridEdit从BaseEditClass继承。 自定义属性 名称 说明 Grid 编辑所用的DataGridView 自定义方法 名称 说明 RecordValid 统一的数据验证方法,在单条保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 1.2.3 BaseGridEditForm BaseGridEditForm是所有直接使用DataGridView进行编辑的功能的模板。所有直接使用DataGridView进行编辑的功能都需要从该模板拷贝后进行修改。 2. 模板使用方法 2.1 BaseGridEditForm 使用BaseGridEditForm需要按以下四步操作就可以得到需要的功能。 一、 先从BaseGridEditForm拷贝文件到工程后修改类名、命名空间 二、 在项目的数据集中增加TableAdapter,以查询需要维护的指定的数据表 三、 将DataGridView绑定到新增的数据表 四、 修改以下基类方法 名称 说明 构造方法 增加”DataTable属性=新增数据表”的代码 FormInit 增加需要的Form初始化代码,如RefreshData以获得数据 PostData 增加一行代码:新增的TableAdapter.Update(row) RefreshData 增加使用新增TableAdapter.Fill(DataTable)的代码,以获得查询数据。注意:代码需要写在IsRefreshData = true;和 IsRefreshData = false;语句的中间 RecordValid 增加自定义的数据校验语句。 NewRecord 增加自定义的新增数据默认值代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值