請問ClientDataSet中的Internalcalc欄位儲存的問題 |
尚未結案
|
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
請問一下各位先進
小弟使用ClientDataSet,DataSetProvider,dxdbgrid,dataSource,ADOQuery 這幾個元件作了一個供輸入的表格 我先將 DataSetProvider 的 DataSet 屬性指向 ADOQuery。 再將ClientDataSet 的 ProviderName 屬性指向 DataSetProvider。 接下來把dataSource 的 DataSet 屬性 ClientDataSet 。 最後我把設定好的 dataSource 放到 dxdbgrid 的 dataSource 屬性中。 接下來我依照我所需要的欄位類型,在ClientDataSet的Fields editor 中使用 New Fields 加上我所要的欄位 其中我有設定一個欄位類型為 Internalcalc (這個欄位為資料庫沒有的,我額外添加的虛擬欄位),型態是Smallint 然後我在 dxDBGrid 的欄位設定上設定這個欄位為TdxDBGridcheckcolumn的類型 而它的valuechecked = 1 valueunchecked = 0 接下來是我的問題(很抱歉上面打太長了,不過我想環境描述清楚點比較好@.@) 這樣做的話虛擬欄位可以打勾,而且顯示也不會有問題。 但是當我執行以下的程式的時候,我發現他選擇出來的數據不是我所想要的,而且他有時候會出現有時候不會 不過有時候卻是正確的(點個欄位跟戳戳樂一樣= =),似乎值是無法儲存進去的關係。 [code delphi] while not cds1.Eof DO //cds1為 ClientDataSet begin if cds1.FieldByName('Checked').AsInteger = 1 then //Checked是新增的虛擬欄位 begin Listbox1.Items.Add(cds1.FieldByName('ID').Asstring); //測試顯示的選擇是否正確 end; cds1.Next; end; [/code] 我有看過站內文章,許多前輩建議是在oncalcfield中做處理,不過大多是用DBGrid ,我想套進去DXDBGrid卻不知道該如何著手。 或是我該在哪個地方做虛擬欄位的儲存動作(當然,這欄位數值是不需要回寫回資料庫的)。 可以的話能給我一個範例讓我能夠更加明白我的錯誤在那兒。 感謝! |
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
這個問題我有找出方式解決嚕,以下是我的解決方法。
可能是我太執著於"儲存"了,所以一開始都在找這個欄位值可能儲存的地點。 後來找了站內文章看了看之後,發現大部分的前輩都將值儲存於另外一個TStringList中,然後在作額外的分析 這讓我想到另外一個方式來作,所以我先生成一個 TStringList 叫做 Savestr 來做儲存的容器 然後在這個ClientDataSet的OnAfterPost中,輸入以下的程式碼 [code delphi] if dxDBGrid.FocusedColumn = 0 then begin if savestr.IndexOf(cds1.FieldByName('ID').Asstring) = -1 then begin if dxDBGrid.FocusedNode.Strings[dxDBGrid.FocusedColumn] = '1' then savestr.Add(cds1.FieldByName('ID').Asstring); end else begin if dxDBGrid.FocusedNode.Strings[dxDBGrid.FocusedColumn] = '0' then savestr.Delete(savestr.IndexOf(cds1.FieldByName('ID').Asstring)); end; end; [/code] 然後我將這個StringList的結果放置到Memo中 [code delphi] cds1.Edit; cds1.Post; memo1.Text :=savestr.Text ; [/code] 這樣Memo的Lines就是我所想要的數據了。 PS:在程式碼中的...好像是沒有辦法消除說,我試了幾次都失敗 =.= |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |