动态数据交换(DDX)的另类用法

        还是在写那个数据库应用的输入界面,在为对话框中的控件绑定变量时发现。如果给EDIT绑定CString的话虽然能使用MFC的动态数据效换,但是没办法去控制EDIT的行为。例如,我一开要让这些EDIT全被Disabled掉,只有在开打编辑状态后才能Enabled让操作者对EDIT的内容进行编辑。所以,如果给EDIT绑定CEDIT虽然能控制编辑框的行为但不能使用MFC的动态数据交换了。这样要自己写数据交换的功能会很麻烦。不过,可以采取给EDIT绑定一个CString又绑定一个CEDIT的办法来实现又能使用MFC的数据交换又可以控制EDIT的行为的目的。只是这样一来,每一个EDIT就会有两个成员变量与之对应。本来对话框中的EDIT就有很多,如此一来成员变量的数据更是翻倍。虽然这也没有什么,但我看着总是觉得不舒服。所以把主意打到了MFC的动态数据交换上来,我可不想重写新的DDX也不想写新的类。所以试着把DDX_Text()绑定的成员变量指向数据库类的中的RDX动态数据交换中由类向导生成的对应数据库字段的成员变量。这样一来,直接就与数据库类联系上了,在对话框中UpdateData()之后EDIT中的内容就直接传到数据库对应的字段变量中,再执行数据库类的UpData()就可以直接写入数据库。而不用像以前那样,先在对话框UpdateData()将更新内容交换到绑定的成员变量,再把这个成员变量的值赋给数据库类的字段变量。中间省去了很烦琐的东西。
        示列代码如下: DDX_Text(pDX, IDC_EDIT6, m_set->m_yxsj);
        注意点1:如果数据库中有日期字段。绑定字段变量后要把对应这个日期字段的成员变量类型由CTime改为CString,不然这个字段不能在对话框的数据交换正确传送到EDIT中。 
        注意点2:类向导并不支持这样的另类用法,所以当你做了以上修改后再打开类向导。会问你要不要删掉这些错误的绑定。而此时你要用到类向导的话可以暂时先把绑定部份给剪切掉,在类向导里干完活后再粘贴回来。
        注意点3:因为绑定的成员变量来自数据集类中绑定的字段变量,而DDX在对话框或视图在创建和退出时都会调用。所以要在之前和之后把绑定的数据集类实例化,不然会引起显非法内存访问。所以,最好在视图或对话框的构造和析构函数中new和delete数据集类。
        乱七八糟写了一堆,不知道有几个人能看明白。有时间再修改吧

你可能感兴趣的:(MFC,ODBC技巧心得)