datagrid和记录集绑定后
修改的记录会在离开该单元格的时候自动写入数据库

解决方案 »

  1.   

    我是把datagrid嵌入对话框中,在更新后关闭对话框或把鼠标点一下别的地方是自动保存了,但我不想这样,
    我是想自己能控制的保存和undo.这样怎么做,大侠门
      

  2.   

    这样啊
    datagrid有beforeupdate消息
    响应它来处理
    如果没达到你的要求,那就直接返回
    可以试着发送消息,但是我不知道行不行还有个办法
    就是关掉update
    自己加个文本框(参考可编辑的flexgrid,clistctrl)
      

  3.   

    还是不行啊,能给段代码不,或者datagrid是怎么保存到数据库的,保存的过程到底发生了什么,调用了什么函数
      

  4.   

    当用户移动到另一行或者执行 Recordset 对象的 Update 方法时,数据将从 DataGrid 控件的复制缓冲区移动到 Data 控件的复制缓冲区,并且写到数据库里。在数据从 DataGrid 控件的复制缓冲区移到 Data 控件的复制缓冲区之前,触发 BeforeUpdate 事件。除非复制操作被取消,在数据被移回至 Data 控件的复制缓冲区并写到数据库以后, AfterUpdate 事件被触发。更新的记录可通过使用 DataGrid 控件的 Book 属性获取。如果将 BeforeUpdate 事件的 cancel 参数设置为 True ,焦点会保持在控件上,既不触发 AfterUpdate 事件也不触发 LostFocus 事件,记录也不存入数据库。 BeforeUpdate 事件发生在该控件的 AfterUpdate 和 LostFocus 事件之前,或发生在按 Tab 键次序的下一个控件的 GotFocus 事件之前即使该控件未被连结该事件也会发生。与 Change 事件不同的是,使用代码改变控件或记录中的数据时不触发本事件。 在允许用户将变化提交 Data 控件的复制缓冲区之前, 可以用本事件使一个被绑定的控件记录中的数据有效。通过将 cancel 参数设置为 True , 用户不能将焦点移离控件,除非应用程序确定数据能够安全地移回 Data 的复制缓冲区。
      

  5.   

    我在beforeupdate中把cancel设为true了,可还是保存到数据库中了,是不是还应该相应的设置其他什么属性?哭求解决方法啊,困扰好久了
      

  6.   


    那个只是说流程
    貌似目前我只能想到关掉datagrid的update功能,自己加个文本框
      

  7.   

    如何关掉update功能,是在beforeupdata中设置cancel=true么,文本框怎么加,能不能说具体点,谢谢拉
      

  8.   

    不是
    关掉update,只要在datagrid的属性里设置就好了
    至于如何用文本框
    你看看flexgrid或者clistctrl的相关的,比如可编辑的flexgrid
      

  9.   

    还是没达到我预想的那样,是不是我的问题没说明白呀?再追加 一个问题,列建好后,还能不能更改列的属性,怎么改,也是ADO C++
      

  10.   

    修改表中列的属性,用ADOX方法,比如把某列的属性修改成'自动编号'
      

  11.   

    要在没有记录的情况下才能成功
    alter table t alter column id AUTOINCREMENT
      

  12.   

    新建的列马上修改都不行
    m_pColumn->ParentCatalog = catalog;
    m_pColumn->Name = lpstrFieldName;
    m_pColumn->Properties->GetItem(_T("AutoIncrement"))->Value = true;
    m_pTable->Columns->Append的时候就报错.把上句去掉就可以,是不是设置"AutoIncrement"属性时还得相应设置其他的属性,望指教