首先我们看下如果跳转到指定行
select *from Table order by field1
显示在DBGrid内容如下:
| filed1 | field2 |
| some1 | A |
| some2 | X |
| some8 | s |
| some11 | D |
借助TBookmark
void GotoLine(String sValue,TDataSet *tab)
{
TBookmark bookmark=NULL;
for(int i=0;i<tab->RecordCount;++i)
{
if(tab->Fields->Fields[1]->AsString.Trim()==sValue)
{
bookmark=tab->GetBookmark();
tab->GotoBookmark(bookmark);
break;
}
tab->Next();
}
}或者使用TDataSet的MoveBy方法
好了,实现DBGrid刷新 选中行不变
我们使用MoveBy跳到指定行,但是int __fastcall MoveBy(int Distance); 跳转的只是一个相对位移 所以我们需要先跳转到表头
void __fastcall GotoTabHead(TDataSet *tab)
{
tab->First();
TBookmark bookmark=tab->GetBookmark();
tab->GotoBookmark(bookmark);
}刷新DBGrid处
static int line_no=0;
line_no=DBGrid1->DataSource->DataSet->RecNo;
//刷新DBGrid
GotoTabHead(DBGrid1->DataSource->DataSet);
DBGrid1->DataSource->DataSet->MoveBy(--line_no);
本文介绍如何在DBGrid中通过TBookmark或TDataSet的MoveBy方法实现直接跳转到指定行的功能,并保持刷新后选中行不变。

473

被折叠的 条评论
为什么被折叠?



