使用TClientDataSet控件与DBGrid控件编辑显示数据窗口。
在设计过程中,ClientDataSet与DBGrid放置在两个不同的动方,手工连接。由于ClientDataSet中的数据,部分在DBGrid中要求不显示。
在新增的行中,隐藏的列是必填字段,不能为空值,如果提交到数据库中,当然要报字段不能为空的错了。
要怎么才能手工加入隐藏的字段数据呢?
ClientDataSet 有Data与Delte对象,前者为从数据源中取到内存的数据,后然是内存修改数据,等待更新到物理数据源中的数据。
Delte中的数据可以通过创建一个新的ClientDataSet 对象来得到Data,能知道有哪些数据是等待提交的。但是新的ClientDataSet中的Data不能提交到前者ClientDataSet的Delte里。这个方法行不通了。Delte的只能用来查看数据,不能再修改。再者,如果是修改的数据,那么有两条,怎么判断修改的数据也是个麻烦的事。所以,Delte这里行不通。
ClientDataSet有UpdateStatus方法,用来表述Data数据的Modify情况。哈~~可往这里发展。
UpdateStatus的属性TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
Data中的数据,前面讲了,是从数据库中取到的内存数据,但是问题又来了,新的Insert的数据,这里面没有。怎么办?使用Post,提交到内存数据里面。只要没有ApplyUpdates过,UpdateStatus的值都没有重置过。
if ClientDataSet.UpdateStatus = TUpdateStatus (usUnmodified, usModified, usInserted, usDeleted) then 来判断行的Modify状态吧。要手工加哪个就加哪个。但这个方法也有问题。
在 while not eof do 循环中,每Next一次,就必须设置Edit一次,可以解决提示不能编辑的错(dataset not in edit or insert mode)。这个还没有找到是在哪里跳转的。