使用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)。這個還沒有找到是在哪裡跳轉的。