zoukankan      html  css  js  c++  java
  • 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了

  • 相关阅读:
    第2课 有符号与无符号
    第1课 基本数据类型
    HDU 5821 Ball
    Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation
    HDU 5810 Balls and Boxes
    HDU 5818 Joint Stacks
    HDU 5813 Elegant Construction
    Codeforces Round #357 (Div. 2)C. Heap Operations
    Codeforces Round #364 (Div. 2) C. They Are Everywhere
    HDU5806 NanoApe Loves Sequence Ⅱ
  • 原文地址:https://www.cnblogs.com/ewyb/p/1813406.html
Copyright © 2011-2022 走看看