Delphi中 DBGrid 与 StringGrid 的共性? (10分)

  • 主题发起人 主题发起人 apple058
  • 开始时间 开始时间
A

apple058

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
我想用 DBGrid 能控制 当前“行”与“列”
就如同 StringGrid.cells[1,0] 可以 往 第 0 列,第 1 行 写数据
StringGrid.Row,StringGrid.Col 可以知道 用户是选定的当前是多少行,是多少列。
请问:1)如何 用 DBGrid 能控制 当前“行”与“列” ?
2)如何 在 DBGrid 中 判断用户是选中的哪一行,那一列? (譬如 : 用户选择第5行,第1列发生一事件)
 
在DBGrid.DataSource.DataSet当前记录就是你选中的行,Fields就是你选中的列.
 
dongberlin 你好: 在生成应用程序之后 是否能判断用户是选中的哪一行,那一列?
 
DBGrid.DataSource.DataSet当前记录就是你选中的行
DBGrid.SelectedField就是你选中的列.
 
dongberlin 你好;不好意思我现在 delphi 坏了,不能调试,
也就是说
我能通过 if (DBGrid.DataSource.DataSet=1) and (DBGrid.SelectedField=2)
then 发生事件
用户是在应用程序点击 第1行,第2 列 可以发生这个事件?
 
[:(!][^][?][:(][8D][8D][:D][:)]
 
Peter.pan 你好:你这是什么意思?

dongberlin 你好:
DBGrid.DataSource.DataSet 这根本不是一个整数类型
DBGrid.SelectedField 也是一样, 怎么能判断是选中的当前第几行,第几列?

if (DBGrid.DataSource.DataSet=1) and (DBGrid.SelectedField=2)
then 发生事件
我就是要这样工作.但不行!!

 
To apple058
DBGrid.DataSource.DataSet不是整数类型,它是表记录集类型.如:
A(A1,A2,A3,A4)A表,包括A1,A2,A3,A4字段,且全是varchar类型.表中有以下数据
a1,b1,c1,d1
a2,b2,c2,d2选择该行,且选择了b2
a3,b3,c3,d3
则你选择的行和列的数值=DBGrid.SelectedField.AsString(即b2)
DBGrid.DataSource.DataSet.Fields[0].AsString=a2,
DBGrid.DataSource.DataSet.Fields[1].AsString=b2,
DBGrid.DataSource.DataSet.Fields[2].AsString=c2,
DBGrid.DataSource.DataSet.Fields[3].AsString=d2.
希望你还是先看一下书,了解多一点Delphi的基本知识,这样才能取得比较快的进步.
若说错了,请不要见怪.谢谢!
 
dongberlin 你好:
不好意思,这个问题我想了好就都没有搞清楚,
我总觉得你所说的这个操作,只是对 A表的4个字段进行赋值 操作,

譬如我现在像这样做,
我现在往窗体 放一个 DBGird 用于显示数据,还放一些连接组件( TTable,TdataSource,)
并且连接了数据表( A 表)
编译后生成可执行文件(app.exe), 我要在打开 app.exe
我要实现 当用户鼠标双击 dbgrid 时 如果当前焦点在 dbgrid 的 第3行,第2列, 则关闭程序,请问你怎么编写 这个鼠标双击事件?

 
对于列的控制用DBGRID的DrawColumnCell事件的SelectedIndex 属性可搞定
procedure TForm_sqs.user_DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var tt:Trect;
begin
inherited;
if user_dbgrid.SelectedIndex =9 then
begin
if (gdSelected in state ) or (gdFocused in state) then
begin
//实现语句
end;
end;
End;
对于列的控制用DBGRID
GotoBookmark(pointer(DBGrid1.SelectedRows.Items));
可以实现多看看帮助!
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items));
for j := 0 to FieldCount-1 do
begin

if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
Listbox1.Items.Add(s);
s:= '';
end;
end;
 
TO :悟性

有没有根好的方法呀!这个太麻烦了(和 StringGrid 比较)
你能不能简单的实现

dbgrid.click()
lable1.caption:= 当前点中的行
lable2.caption:=当前点中的列

而 StringGrid 就好实现多了
StringGrid.click();
lable1.caption;=StringGrid.Row,
lable2.caption:=StringGrid.Col;

请问能不能这么简单的实现呢?


 
后退
顶部