解决DBGridEh遍历记录后不移动当前行位置的方法
来源:互联网 发布:麦德氏淘宝有旗舰店吗 编辑:程序博客网 时间:2024/05/21 06:47
解决DBGridEh遍历记录后不移动当前行位置的方法
在用DBGridEh配合ClientDataSet使用时,需要知道用户选择了哪些记录,可用遍历记录的方法查询选择列是否为真,但在这之后,ClientDataSet记录指针的位置发生了改变,可用TBookMark的bm:=GetBookMark(ClientDataSet)在遍历前记录下当前指针的位置,在遍历后在用ClientDataSet.GotoBookMark(bm);然后释放ClientDataSet.FreeBookMark(bm);
但在这里有个问题是,虽然回到了用户操作前的记录位置,但DBGridEh的当前记录位置会移到表格的中间,使得想看到的记录又看不到,
忽然想起ClientDataSet有一个克隆功能,先把要遍历的数据集克隆下来,在这个克隆的数据集里查询,就不会改变用户界面上的记录集指针位置了。经测试,如法炮制。
function TMeterReadingForm.bDataMarkChecked: Boolean;
var
cds: TClientDataSet;
begin
Result := false;
cds := TClientDataSet.Create(nil);
try
SendDataThread.DataMarkCount := 0;
if cdsDataMark.State in[dsEdit,dsInsert] then
cdsDataMark.Post;
cds.CloneCursor(cdsDataMark, True);
cds.First;
while not cds.Eof do
begin
if cds.FieldByName('Checked').AsBoolean = true then
begin
Result := True;
SendDataThread.Datamarks[SendDataThread.DataMarkCount] := cds.FieldByName('f_DataMark').AsString;
Inc(SendDataThread.DataMarkCount);
end;
cds.Next;
end;
finally
cds.Free;
end;
bChecked := Result;
end;
而且这种内存数据集速度应该非快,再也用不着下面这种繁锁的代码了。
function TMeterReadingForm.bDataMarkChecked: Boolean;
var
bm: TBookmark;
begin
Result := false;
SendDataThread.DataMarkCount := 0;
try
bm := cdsDataMark.GetBookmark;
cdsDataMark.DisableControls;
cdsDataMark.First;
while not cdsDataMark.Eof do
begin
if cdsDataMark.FieldByName('Checked').AsBoolean = true then
begin
Result := True;
SendDataThread.Datamarks[SendDataThread.DataMarkCount] := cdsDataMark.FieldByName('f_DataMark').AsString;
Inc(SendDataThread.DataMarkCount);
end;
cdsDataMark.Next;
end;
cdsDataMark.GotoBookmark(bm);
finally
cdsDataMark.FreeBookmark(bm);
cdsDataMark.EnableControls;
end;
bChecked := Result;
end;
- 解决DBGridEh遍历记录后不移动当前行位置的方法
- 刷新dbgrid 而不失去当前行位置
- DBGridEh让选择的记录不随垂直滚动条滚动而移动
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- gridview获取当前行索引的方法
- sqlserver用当前行减去前一行的数据的简单处理方法 -- 不使用循环
- emacs将光标移动到当前行的中间
- 如何在datagrid中用dropdownlist显示当前行的记录
- CABasicAnimation 如何解决保持移动后的位置状态不变
- dataGridView修改完数据后,滚动条位置不变,强制选择当前行
- 解决Pocket PC取DataGrid当前行的问题
- 获取GridView当前行的索引值的方法汇总
- 右键点击DGV同时选中当前行的方法
- 如何利用问问做好产品的宣传?
- 建筑工程与软件工程的异同
- Unable to start program '%CSIDL_PROGRAM_FILES%/XXXX/XXXX.exe'的问题分析
- 你敢天长,我就敢地久
- 冯小刚回应质疑:中国没大师 谁都别装!
- 解决DBGridEh遍历记录后不移动当前行位置的方法
- 單據編號設計的探討
- CPen 与HPEN
- gsl科学计算库文档,翻译了索引
- 关于名为《我是流氓网站》的网站创意。
- C++各大有名科学计算库(转)
- 別把話說太死, 別把事做太絕
- poi设置行高列宽
- Tair: 淘宝的key/value解决方案