全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2428
推到 Plurk!
推到 Facebook!

请教,当我单几击 dbgrideh 时,怎么知道我是单击的 第几行,

尚未結案
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-18 10:30:50 IP:219.128.xxx.xxx 未訂閱
请教,当我单几击 dbgrideh 时,怎么知道我是单击的 第几行,第几格呢? 如附件: 当我单击 时,程序怎么知道我单击的是 第三行,第二格呢? 是不是要把单击事件写在: procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); begin    end;    还有  第三行,第二格  在程序里是怎么表示的呢?    谢谢!    
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-18 10:40:23 IP:61.70.xxx.xxx 未訂閱
您好: 參考如下 如要設定Column的寬度DBGrid1.Columns[0].Width:=70; 第三行的第二格再應用上應該是把DataSet移到第三筆,然後看您第二格式哪個欄位去得到他的數值. 發表人 - supman 於 2005/04/18 10:46:01
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-18 11:07:05 IP:219.128.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-18 15:01:05 IP:218.15.xxx.xxx 未訂閱
插个花: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-18 16:15:08 IP:219.128.xxx.xxx 未訂閱
非常非常 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-18 16:19:57 IP:207.248.xxx.xxx 未訂閱
你好,關於你的問題答復如下,看看滿意麼。 單擊取決於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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-18 17:21:47 IP:61.70.xxx.xxx 未訂閱
您好: 我猜測DBGridEh的CheckBox是否為這樣用?? DBGridEh1.Checkboxes[0].Checked:=true 抱歉沒有那個元件,可以告知那元件哪邊有嗎?我抓來玩看看以後再跟您說應該如何處理這問題.
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-18 17:23:04 IP:219.128.xxx.xxx 未訂閱
非常感谢 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-18 18:13:56 IP:219.128.xxx.xxx 未訂閱
我自己先把他顶到最前面拉~~ 真的很急啊^_^
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-18 19:36:58 IP:203.204.xxx.xxx 未訂閱
您好 我寫了一個範例,手動去達成這各功能先讓您應應急,您看看吧 http://hk.geocities.com/supman1supman5/griddemo.zip
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-18 21:56:01 IP:219.128.xxx.xxx 未訂閱
supman 大哥 您好! 我打不开 http://hk.geocities.com/supman1supman5/griddemo.zip 可以发到我的油箱吗? lsh9982008@163.com 此致 敬礼!
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-18 22:30:00 IP:219.129.xxx.xxx 未訂閱
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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-19 08:45:07 IP:219.128.xxx.xxx 未訂閱
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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-04-19 11:46:17 IP:219.128.xxx.xxx 未訂閱
请 deity 和 supman 大哥 再帮我顶顶啊^_^! 谢谢!
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-04-19 16:34:16 IP:219.128.xxx.xxx 未訂閱
ding^_^
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-04-19 23:37:27 IP:219.129.xxx.xxx 未訂閱
lsh998您好: 1、其实都有先进在关注您的问题的,所以您不用自己“顶”,否则会让人觉得有灌水之嫌。再说在这里灌水也没好处可捞,呵呵另您如果有代码需放上来的话,应在代码前后加<>[>]…您的代码…<>[/>]。详细请查看站内说明。 >~~~静心养德~~~
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-04-20 08:30:52 IP:219.128.xxx.xxx 未訂閱
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 怎么升级啊? 最后再次感谢所以关注过本贴的 各位大哥!
系統時間:2024-06-24 20:42:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!