我有一個函數來更新從答案的幫助作出了cxGrid到Loop through records on a cxgrid and update a field/column更新外地代理奇怪
但有時行事有點怪。如果我用cxGrid打開表單並單擊沒有做任何事情的欄目標題,記錄就會更新。但是如果'selectorbar'從頂部移開,標記的記錄不會更新。 我相信這是一個需要改變的財產,但是哪一個。
變量fSelected在FormShow中設置爲False,並且它也是用戶可以取消選擇記錄。
procedure TfrmContactsSelect.colContactSelectedHeaderClick(Sender: TObject);
var
i: Integer;
Index: Integer;
BookMark : TBookMark;
Contact: variant;
begin
if fMulti = True then
begin
Screen.Cursor := crHourGlass;
fSelected := not fSelected;
BookMark := qryContacts.GetBookmark;
qryContacts.DisableControls;
try
for i := 0 to grdContactsView1.DataController.FilteredRecordCount - 1 do
begin
Index := grdContactsView1.DataController.FilteredRecordIndex[i];
Contact := grdContactsView1.DataController.Values[Index, 4];
if grdContactsView1.DataController.LocateByKey(Contact) then
begin
qryContacts.Edit;
qryContacts.FieldByName('fldcontact_selected').AsBoolean := fSelected;
qryContacts.Post;
end;
end;
finally
qryContacts.EnableControls;
qryContacts.GotoBookmark(BookMark);
qryContacts.FreeBookmark(BookMark);
end;
Screen.Cursor := crDefault;
end;
end;
德爾福XE7,DevExpress的14.2.2,UniDAC 5.5.12 DB訪問
評論: 我已經結束了與基於來自MartynA
procedure TfrmContactsSelect.colContactSelectedHeaderClick(Sender: TObject);
var
i: Integer;
Index: Integer;
MarkedRecord: variant;
CurrentRecord: variant;
begin
if fMulti = True then
begin
Screen.Cursor := crHourGlass;
fSelected := not fSelected;
Index := grdContactsView1.DataController.FocusedRecordIndex;
MarkedRecord := grdContactsView1.DataController.Values[Index, colContactGuid.ID];
try
for i := 0 to grdContactsView1.DataController.FilteredRecordCount - 1 do
begin
Index := grdContactsView1.DataController.FilteredRecordIndex[i];
CurrentRecord := grdContactsView1.DataController.Values[Index, colContactGuid.ID];
if grdContactsView1.DataController.LocateByKey(CurrentRecord) then
begin
grdContactsView1.DataController.Edit;
grdContactsView1.DataController.SetEditValue(colContactSelected.ID, fSelected, evsText);
grdContactsView1.DataController.Post;
end;
end;
finally
grdContactsView1.DataController.LocateByKey(MarkedRecord);
end;
Screen.Cursor := crDefault;
end;
end;
的答案,輸入以下解決方案
你使用的是什麼版本的DevExpress?你是否已經問DevExpress支持?他們通常也會很快響應 – Zam
,你正在使用的是什麼版本的Delphi?如果它是「現代」的德爾福(高於2007年或2009年),那麼你不需要叫「FreeBookbark」。 – Zam
其他建議,與DevExpress無關 - 「早退」 - 意思是:「如果不是fMulti則退出」; - 將使代碼更容易閱讀 – Zam