DBGrid关联的数据集Open()以后,默认选中了第一条,但是SelectedRows->Count=0,为什么?还有SelectedIndex设置上也不起作用,为什么呢?

书生 2003-02-20 10:55:39
如题。
...全文
146 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
书生 2003-04-04
  • 打赏
  • 举报
回复
晕哦,还是没解决,只得结了,拖太久了。
swordkiller1104 2003-03-12
  • 打赏
  • 举报
回复
我在程序里确实实现了在db+query+dbgrid的情况下,焦点随鼠标移动而移动的,在table的情况下没试过
书生 2003-03-11
  • 打赏
  • 举报
回复
各位的方法都是将焦点移动到第一行,其实这时候DBGrid的SelRows还是0的,需要鼠标再点一下,这行才是真正的被选择了。
swordkiller1104 2003-03-10
  • 打赏
  • 举报
回复
部分源代码如下:(实现dbgrid焦点随鼠标移动变化)
全局变量:oldPos;
在onmousemove里面加如下代码:
coord = DBGrid1->MouseCoord(X,Y);
if(coord.Y>0 && coord.Y!=oldPos)
{
this->Query1->MoveBy(coord.Y-oldPos);
this->DBGrid1->SetFocuse();
oldPos = coord.Y;
}
swordkiller1104 2003-03-07
  • 打赏
  • 举报
回复
有,不过现在不在这里,我周一给你如何?
dacaifu 2003-03-06
  • 打赏
  • 举报
回复
SelectedRows->Count只有在Options->dgMultiSelect = true 时才有效
如指定选择行,可试以下
int row=... //指定选择行
int num = Table1->RecNo;
Table1->MoveBy(row-num);


书生 2003-03-05
  • 打赏
  • 举报
回复
楼上的,有有效代码么?
swordkiller1104 2003-03-01
  • 打赏
  • 举报
回复
可以用MoveBy方法试一试,以前我在TQuery里面是这样实现的
书生 2003-03-01
  • 打赏
  • 举报
回复
继续
书生 2003-02-21
  • 打赏
  • 举报
回复
谢了,楼上的。一看注释,果然是列,我自己想当然了,呵呵。

那有指定选择行的方法么?
书生 2003-02-20
  • 打赏
  • 举报
回复
呵呵,SetFocus()我试过,不起作用。

如题。大家谁有兴趣可以试一下。
whitelion 2003-02-20
  • 打赏
  • 举报
回复
你的table先last,再first一次,看看好不好用
以前遇到过类似的问题
Nepalon 2003-02-20
  • 打赏
  • 举报
回复
fyje(无言相对) 说得对
fyje 2003-02-20
  • 打赏
  • 举报
回复
DBGrid关联的数据集Open()以后,默认选中了第一条,但是SelectedRows->Count=0,为什么?

因为焦点不在dbgrid上,可以设置dbgrid1->setfocus();然后执行SelectedRows->Count

还有SelectedIndex设置上也不起作用,为什么呢?

仍然是焦点的问题
Behard 2003-02-20
  • 打赏
  • 举报
回复
SelectedIndex 是指定选定的 列 不是行
Behard 2003-02-20
  • 打赏
  • 举报
回复
SelectedIndex 是指定选定的 列
Behard 2003-02-20
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( ! Table1->Active ) Table1->Open();
DBGrid1->SelectedIndex = 1;//SelectedIndex
DBGrid1->SetFocus();
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
if ( ! Table1->Active ) Table1->Open(); //SelectedRows->Count
ShowMessage ( IntToStr(DBGrid1->SelectedRows->Count) );
}

void __fastcall TForm1::FormShow(TObject *Sender)
{
DBGrid1->dgMultiSelect = true;
}
书生 2003-02-20
  • 打赏
  • 举报
回复
晕,上面的我执行还是不行,
ShowMessage ( IntToStr(DBGrid1->SelectedRows->Count) );

为0; :(

指定的SelectedIndex=1照样无效,一看还是0。
Behard 2003-02-20
  • 打赏
  • 举报
回复
SelectedIndex:
可以呀
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( ! Table1->Active ) Table1->Open();
DBGrid1->SelectedIndex = 1;
DBGrid1->SetFocus();
//ShowMessage ( IntToStr(DBGrid1->SelectedRows->Count) );
}
l_clove 2003-02-20
  • 打赏
  • 举报
回复
不清楚,用的话就加一条first()语句吧
加载更多回复(4)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧