问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么DBGrid获取焦点行的行号,以及值

发布网友 发布时间:2022-04-10 21:24

我来回答

2个回答

懂视网 时间:2022-04-11 01:45

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB; type TForm1 = class(TForm) ADOTable1: TADOTable; DataSource1: TDataSource; DBGrid1: TDBGrid; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ADOTable1.RecNo := 3; ADOTable1.FieldByName(‘用户名称‘).FocusControl; end; end.

如果希望是第2列获得焦点(字段数组下标从0开始):
ADOTable1.RecNo := 3;
ADOTable1.Fields[1].FocusControl;

 

有一个问题,我的修改窗口是Form_ShangPinZiLiaoModi.ShowModal; 弹出的,所以
Form_ShangPinZiLiaoModi.Close; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.RecNo := CurrentNumber; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.Fields[3].FocusControl;
出现错误,错误内容是“cannot focus a disabled or invisible window”,
我应该怎么改呢?
谢谢!

 

“cannot focus a disabled or invisible window”错误的原因是DBGrid1所在的窗口还没有显示出来,操作某控件的Focus时其所在的窗口必须是已经显示出来的。所以你需要把
Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.RecNo := CurrentNumber; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.Fields[3].FocusControl;
放在窗口显示出来以后的操作中。
另外FocusControl方法是字段对象的方法,所有的数据集控件都应该是可以的。

 

窗口2打开时焦点定位在DBGrid1的3行2列:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses
unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;

end.

************************************************

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids;

type
TForm2 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOTable1: TADOTable;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
ADOTable1.RecNo := 3;
ADOTable1.Fields[1].FocusControl;
end;

end.
还是改不好。我这个是MDI程序,MainForm中 Form1.ShowModal,Form1中Form2.ShowModal,Form1中有DBGrid,Form2是修改窗口,Form2修改之后
Form1.DBGrid1.Fields[3].FocusControl;出错。不用Form2直接在Form1中也不好用。
真是不好改。
你在Form2上做了什么操作后Form1.DBGrid1.Fields[3].FocusControl出的错?把代码贴上来看看比较好找出问题。
MainForm中:
procedure TMainForm.Button1Click(Sender: TObject);
begin
Form1.ShowModal;
end;

Form1中:
procedure TForm1.FormShow(Sender: TObject);
begin

try
if DataModule1.ADOConnection1.Connected then
begin
sql2 := ‘select XuHao as 序号,zhengshuhao as 证书号,kuanhao as 款号,‘ +
‘xiaojia as 销价,rukuliang as 入库量,zhiquanhao as 指圈号,‘ +
‘shouhuoriqi as 收货日期,xiaoshouriqi as 销售日期,fanghuodanwei‘ +
‘ as 放货单位,nid as ID from KuCunInfo order by xuhao‘;

DataModule1.ADOQuery1.Close;
DataModule1.ADOQuery1.SQL.Text := sql2;
DataModule1.ADOQuery1.ExecSQL ;
DataModule1.ADOQuery1.Active := true;
end;

finally
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
{修改KuCunInfo中的数据}

try
Form1.DBGrid1.Fields[3].FocusControl;
finally
end;
end;

这样就出错了,不用在Form2中修改。
哈哈,我弄出来了。在大富翁上搜索的。
Form1.DBGrid1.SelectedIndex := 4;
Form1.DBGrid1.SetFocus;
这样就行了。
谢谢你!
procedure TForm1.Button1Click(Sender: TObject);
begin
{修改KuCunInfo中的数据}
//修改完库存信息后,由于Form1中的数据还是旧的,所以需要在这里更新一下Form1中
//的数据,即:重新打开一次DBGrid1对应的数据集控件(DataModule1.ADOQuery1),然后 
//再执行FocusControl
try
Form1.DBGrid1.Fields[3].FocusControl;
finally
end;
end;

另外以下代码:
DataModule1.ADOQuery1.Close;
DataModule1.ADOQuery1.SQL.Text := sql2;
DataModule1.ADOQuery1.ExecSQL ;
DataModule1.ADOQuery1.Active := true;
建议这样写:
DataModule1.ADOQuery1.Close;
DataModule1.ADOQuery1.SQl.Clear;
DataModule1.ADOQuery1.SQL.Add(sql2);
DataModule1.ADOQuery1.Open;
ADOQuery1控件,如果其SQL为select语句使用Open,如果是Insert、update、delete等不需要返回值的SQL用ExecSQL 。

 

给DBGrid动态赋值后,如何用程序指定某行某列为当前焦点?(100分)

标签:send   ado   source   cli   数据集   inf   order   nal   dialog   

热心网友 时间:2022-04-10 22:53

其中:ROW函数用于返回引用的行号,COLUMN函数返回给定引用的列标。
语法为ROW(reference)、COLUMN(reference)。参数Reference 为需要得到其行号、列号的单元格或单元格区域。若省略 reference,则是对函数 ROW、COLUMN所在单元格的引用。
如在C10单元格输入上面示例公式,返回结果为:本单元格行号为10列号为3
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成都有没有类似蛟龙港这样的地段。打算做小吃车。 蛟龙港有哪些繁华街道 opporeno5有没有nfc功能 oppo支持nfc功能吗 reno5支持nfc功能吗 reno5怎么使用nfc功能 VMware虚拟化平台虚拟机硬盘类型转换 中国的虚拟主机 救命啊..求大侠帮忙啊...昨天去网吧玩龙之谷一会就断开连接.电脑显示... 笔记本电脑打ui和oi什么意思UI设计笔记本电脑配置 ...高级账户的密码!怎么办啊?哪位计算机大侠帮忙解决解决! 英语卷舌,舌头有几种位置可以放 百度提问里看视频,为什么红包还没到账,也没有显示待入账 在实体店购物,能用支付宝的余额加花呗两种方式一起支付吗? 百度知道 签到的现金红包怎么显示待入账啊? 蚂蚁花呗的额度能不能和支付宝里的余额一起合并付款吗? 我看视频得的红包怎么还没有到账呢,还在显示待入账呢 花呗和支付宝账户余额不可以同时使用的么? 怎么把图片的尺寸缩小然后制作成PPT啊,赶作业,谢谢啦! PPT播放图文扭曲咋回事?重装了系统和OFFICE还是一样。 如何用ppt把方形图片拉成椭圆形(不是裁剪,是让图片扭曲的那种拉伸) Delphi中如何提出Dbgrid中某行和某列的值 你好,建行车贷需要几天才能放款 为什么微博加了对方为好友,仍然有向陌生人发送太多消息的,明天再试的提示,怎么解决 新型农村社会养老保险如何计算? 有关农村养老保险个人账户养老金的计算,希望大家 棒棒忙 农村养老保险是怎么算的 农村养老保险个人帐户养老金怎么算? 电脑中出现的"粘滞键"指的是什么? 连按五下SHIFT是个沾滞键,请问这个是干什么用的? 贴滞键会不会对电脑有所损害? 电脑上的粘滞键是什么用的? 在大家眼里,青岛是一个怎样的城市 青岛是一个什么样子的城市 青岛这个城市怎么样? 青岛是个什么城市,青岛离哪些国家近 青岛是个什么样的城市 青岛是个怎样的城市? 欧洲五大联赛单赛季进球纪录和助攻纪录各是多少? 青岛是一个怎样的城市,是新兴城市还是有什么历史的。谢谢 五大联赛单赛季进球记录分别是由谁保持的 欧洲五大联赛球队单赛季的进球记录是多少? 无框折叠玻璃窗如何改造 欧洲足球5大联赛单赛季个人联赛进球记录是多少个? 青岛是怎样一个城市 五大联赛一个赛季进球数最多的是谁 关于五大联赛一些记录的问题是什么 请问,西甲单赛季进球记录是多少 五大联赛中历史上单赛季进球最多的队员是谁?进球数是多少个?详细越好! 折叠窗可不可以在原有的基础上改成平开窗?此图为折叠窗 五大联赛有哪些球队单赛季进球过百? 意甲联赛球队的单赛季进球记录是多少?