DataGridView编辑
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了