首先我们看下如果跳转到指定行
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);