请教,当我单几击 dbgrideh 时,怎么知道我是单击的 第几行, |
尚未結案
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
supman 大哥您好!
不好意思,是我没有表叙清楚。 就像我像我附件上 画红圈的那个 cell (是第三行,第二格哦) 可以这样表示他吗?
DBGridEh1[2,1] 还有个问题是: if DBGridEh1[0,1].Checkboxes=true then
begin
showmessage('oooooo');
end;
提示的错误是:
uild
[Error] Unit1.pas(44): Incompatible types: 'String' and 'Integer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 为什么啊? 谢谢 supman 大哥!
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
插个花:
lsh998您好,
在DBGrid中是可以表示成如下
DBGrid1.DataSource.DataSet.RecNo; //所选中的行
DBGrid1.SelectedIndex;//所选中的列
或:
DBGrid1.Columns.Grid.SelectedIndex//所选中的列
范例如下
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin showmessage('您当前所选中的是第' inttostr(DBGrid1.DataSource.DataSet.RecNo) '行,第' inttostr(DBGrid1.SelectedIndex) '列'); end;行是从1开始,列是从0开始的。因小弟这里没装dbgrideh此控件,没实测,不过也应该是通用的。您试试看。 另问题二: if DBGridEh1[0,1].Checkboxes.Checked=true then //要不要加上此名。因没控件测试,属猜测,错了别见怪。其他就应该是没错的~~~静心养德~~~ |
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
非常非常 supman 和 deity 大哥 表:
judge bit //设置bit 所以显示时,judge 字段显示为 checkbox 如附件
sno int
name int judge 字段为 bit //当通过 dbgrideh 显示、出来 ,就显示为 checkbox
CREATE procedure proc3 as
select judge,sno,name
from test2 GO procedure TForm1.Button1Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='PROC3';
ADOStoredProc1.Open;
DBGridEh1.Columns[0].Title.caption:='是否选择';
DBGridEh1.Columns[1].Title.caption:='学号';
DBGridEh1.Columns[2].Title.caption:='姓名'; if DBGridEh1.Columns[0].Checkboxes=true then
begin
showmessage('ooook');
end;
end; 现在问题是:当我单击某一行的 checkbox ,当 checkbox 的 checked 属性改变时
,我就改变 judge 的值。
所以我就必须得到 我单击的那一个 cell 的 checkbox 属性的 checked 为ture 还是
false 可是我不知道怎么表示啊? 请教,supman 和 deity 大哥 我到底要怎么做呢?
还有 if DBGridEh1[0,1].Checkboxes.Checked=true then 也不行啊 supman 和 deity 大哥 能否给我调式一吗? 谢谢! 为什么:
DBGridEh1[1,1]:='kkkkk';
会提示:
Build
[Error] Unit1.pas(111): Incompatible types: 'String' and 'Integer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 呢? 是不是 DBGridEh1 有什么属性没有设置好啊? 谢谢!
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
你好,關於你的問題答復如下,看看滿意麼。
單擊取決於procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);事件,在此事件可以實現單擊功能。 procedure TForm1.DBGridEh1DblClick(Sender: TObject);事件雙擊可以實現
引言: 请教,当我单几击 dbgrideh 时,怎么知道我是单击的 第几行,第几格呢? 如附件: 当我单击 时,程序怎么知道我单击的是 第三行,第二格呢? 是不是要把单击事件写在: procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); begin end; 还有 第三行,第二格 在程序里是怎么表示的呢? 谢谢! |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
非常感谢 supman , deity 大哥, BIG-ROM 的帮助 我需要 dbgrideh 出现checkbox ,并且能对其进行操作 表:
judge bit //设置bit 所以显示时,judge 字段显示为 checkbox 如附件
sno int
name int judge 字段为 bit //当通过 dbgrideh 显示、出来 ,就显示为 checkbox
CREATE procedure proc3 as
select judge,sno,name
from test2 GO procedure TForm1.Button1Click(Sender: TObject);
begin
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='PROC3';
ADOStoredProc1.Open;
DBGridEh1.Columns[0].Title.caption:='是否选择';
DBGridEh1.Columns[1].Title.caption:='学号';
DBGridEh1.Columns[2].Title.caption:='姓名'; if DBGridEh1.Columns[0].Checkboxes=true then
begin
showmessage('ooook');
end;
end; 现在问题是:当我单击某一行的 checkbox ,当 checkbox 的 checked 属性改变时
,我就改变 judge 的值。
所以我就必须得到 我单击的那一个 cell 的 checkbox 属性的 checked 为ture 还是
false 可是我不知道怎么表示啊? 请教,supman 和 deity 大哥 我到底要怎么做呢?
还有 if DBGridEh1[0,1].Checkboxes.Checked=true then 也不行啊
if TStringGrid(DBGRIDEH1[0,0].Checkboxes)=true then 提示的错误是: Build
[Error] Unit1.pas(111): Incompatible types: 'String' and 'Integer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
supman , deity 和 BIG-ROM大哥 能否给我调式一吗? 谢谢! 發表人 - lsh998 於 2005/04/18 17:29:19
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
lsh998您好:
搞了半天都不是很明白您所想要的?
1、一开始以为您是想得到您当前所选中的单元格是第几行,第几列?
可以参考我第一次发上来的代码
procedure TForm1.DBGridEh1CellClick(Column: TColumn); begin showmessage('您当前所选中的是第' inttostr(DBGridEh1.DataSource.DataSet.RecNo) '行,第' inttostr(DBGridEh1.SelectedIndex) '列'); end;2、对于您所出现在的 为什么: DBGridEh1[1,1]:='kkkkk'; 会提示: Build [Error] Unit1.pas(111): Incompatible types: 'String' and 'Integer' 好像没这种写法吧?小弟比较少用此控件,不是很清楚,感觉应该这样写才对:DBGridEh1.Fields[1].AsString:='123';您可以试试看。 3、引用:所以我就必须得到 我单击的那一个 cell 的 checkbox 属性的 checked 为ture 还是false 这不知是不是您的最初目的。 要判断是否是checked。小弟下了个dbgrideh 。初初试了下,您可采用如下方法: procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); begin if Column.CheckboxState=cbUnchecked then begin showmessage('the CheckBox is Checked'); end; if Column.CheckboxState=cbchecked then begin showmessage('the CheckBox is UnChecked'); end; end;最后请试试看 另附上代码,小弟环境: class="code"> unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Grids, DBGridEh; type TForm1 = class(TForm) DBGridEh1: TDBGridEh; DataSource1: TDataSource; Button1: TButton; ADOStoredProc1: TADOStoredProc; Button2: TButton; procedure Button1Click(Sender: TObject); procedure DBGridEh1CellClick(Column: TColumnEh); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ADOStoredProc1.Close; ADOStoredProc1.ProcedureName:='PROC3'; ADOStoredProc1.Open; DBGridEh1.Columns[0].Title.caption:='是否选择'; DBGridEh1.Columns[1].Title.caption:='学号'; DBGridEh1.Columns[2].Title.caption:='姓名'; end; procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); begin showmessage('您当前所选中的是第' inttostr(DBGridEh1.DataSource.DataSet.RecNo) '行,第' inttostr(DBGridEh1.SelectedIndex) '列'); if Column.CheckboxState=cbUnchecked then begin showmessage('the CheckBox is Checked'); end; if Column.CheckboxState=cbchecked then begin showmessage('the CheckBox is UnChecked'); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if DBGridEh1.Columns[0].CheckboxState=cbUnchecked then begin ADOStoredProc1.Edit; DBGridEh1.Fields[1].AsString:='123'; ADOStoredProc1.Post; end; end; end. ~~~静心养德~~~ 發表人 - deity 於 2005/04/18 22:53:15 |
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
deity 和 supman 大哥 真是辛苦您们了 不过还是有问题哦~~ 表:
judge bit //设置bit 所以显示时,judge 字段显示为 checkbox 如附件
sno int
name int judge 字段为 bit //当通过 dbgrideh 显示、出来 ,就显示为 checkbox
CREATE procedure proc3 as
select judge,sno,name
from test2 GO CREATE procedure procwww
@sno int as
update test2
set xx='1'
where sno=@sno GO create procedure procwwv
@sno int as
update test2
set xx='0'
where sno=@sno GO procedure TForm1.Button1Click(Sender: TObject);
begin
ADOStoredProc2.Close;
ADOStoredProc2.ProcedureName:='PROC3';
ADOStoredProc2.Open;
DBGridEh1.Columns[0].Title.caption:='是否选择';
DBGridEh1.Columns[1].Title.caption:='学号';
DBGridEh1.Columns[2].Title.caption:='姓名';
end; procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
begin if Column.CheckboxState=cbUnchecked then
begin
// showmessage('the CheckBox is Checked'); ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='procwww';
ADOStoredProc1.Parameters.Clear;
ADOStoredProc1.Parameters.CreateParameter('@sno',ftinteger,pdinput,4,strtoint(ADOStoredProc2.Fieldbyname('sno').AsString));
ADOStoredProc1.ExecProc; end;
if Column.CheckboxState=cbchecked then
begin
// showmessage('the CheckBox is UnChecked');
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='procwwv';
ADOStoredProc1.Parameters.Clear;
ADOStoredProc1.Parameters.CreateParameter('@sno',ftinteger,pdinput,4,strtoint(ADOStoredProc2.Fieldbyname('sno').AsString));
ADOStoredProc1.ExecProc;
end;
end; 可是我单击最后一条记录时,就会出现如附件所示的错误。 请 deity 大哥再给我调式一下,好吗? 礼致
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
deity 大哥:
你的态度令人敬佩,我会好好学习的! 昨天我的问题其实有两个问题:
问题1:我执行
ADOStoredProc1.ProcedureName:='procwww';
ADOStoredProc1.ProcedureName:='procwwv';
使表的数据发生了变化
而 ADOStoredProc2.Fieldbyname('sno').AsString 还是第一次打开始时的数据
所以需要在
ADOStoredProc1.ProcedureName:='procwww';
ADOStoredProc1.ProcedureName:='procwwv';
刷新 问题2:不能写在 DBGridEh1CellClick(Column: TColumnEh); 里
如果写在 buttonclick 里就可以,
我也不知道原因 ^_^(不知道是不是速度跟不上?) 还需请教 deity 大哥 ado 怎么升级啊? 最后再次感谢所以关注过本贴的 各位大哥!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |