procedure TForm1.DBGrid1CellClick(Column: TColumn); begin ShowMessage(Column.Field.FieldName);//这里可以知道点击的是那里一列,就是Column end;然后在双击事件中根据这个参数去做处理
如果确如楼主所描述的问题,答案如1楼。 但需要补充: procedure TForm1.DBGrid1DblClick(Sender: TObject) //使用DBGrid的OnDoubleClick事件,而不是Cellclick(单元格单击)事件 var OldPos,i:Integer; Str:String; begin with DBGrid1.DataSource.Dataset do begin if ((Active=True) and (Assigned(DBGrid1.SelectedField)))then //确保数据集已打开,并且在DBGrid中所选择的列有效 begin OldPos:=RecNo;//记录原始的指针位置 //收集所选择的这一列的全部行的取值 for i:=0 to RecordCount-1 do begin Str:=Str+FieldByName(DBGrid1.SelectedField.FieldName).Asstring+#13#10; end; RecNo:=OldPos;//恢复数据集指针位置 ShowMessage(Str);//显示这一列的信息 end; end; end;
如果楼主没有其它要求,我认为最后把DBGrid的Options属性中的dgRowSelect修改为True,这样看起来好看(不改也可以) [code=Delphi(Pascal)] procedure TForm1.DBGrid1DblClick(Sender: TObject); var i:integer; Str:String; FieldName:String; DispName:String; begin with DBGrid1.DataSource.DataSet do begin //根据DBGrid显示的每一列取值 for i:=0 to DBGrid1.Columns.Count-1 do begin //取得与DBGrid显示列的数据库中的列名称 FieldName:=DBGrid1.Columns[i].FieldName; //取得DBGRid显示的标题名称 //注:数据库列表不一定与标题名相同,这种情况下为了与DBGrid的显示一致,需要 // 以DBGrid的列标题名称作为显示数据 DispName:=DBGrid1.Columns[i].Title.Caption; Str:=Str+DispName+'='+FieldByName(FieldName).AsString+#13#10; end; ShowMessage(Str); end; end;[code]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
ShowMessage(Column.Field.FieldName);//这里可以知道点击的是那里一列,就是Column
end;然后在双击事件中根据这个参数去做处理
但需要补充:
procedure TForm1.DBGrid1DblClick(Sender: TObject)
//使用DBGrid的OnDoubleClick事件,而不是Cellclick(单元格单击)事件
var
OldPos,i:Integer;
Str:String;
begin
with DBGrid1.DataSource.Dataset do
begin
if ((Active=True) and (Assigned(DBGrid1.SelectedField)))then
//确保数据集已打开,并且在DBGrid中所选择的列有效
begin
OldPos:=RecNo;//记录原始的指针位置
//收集所选择的这一列的全部行的取值
for i:=0 to RecordCount-1 do
begin
Str:=Str+FieldByName(DBGrid1.SelectedField.FieldName).Asstring+#13#10;
end;
RecNo:=OldPos;//恢复数据集指针位置
ShowMessage(Str);//显示这一列的信息
end;
end;
end;
下面写事件,然后再根据DBGrid1.DataSource.Dataset当前的条目去找你要显示的信息
信息如下:
编号 姓名 班级 成绩然后双击的是某一行,弹出个新窗口,窗口里面包含这一行的全部信息,让人一目了然比方双击之后,变成
001 张三
2(1)班 100分
[code=Delphi(Pascal)]
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
i:integer;
Str:String;
FieldName:String;
DispName:String;
begin
with DBGrid1.DataSource.DataSet do
begin
//根据DBGrid显示的每一列取值
for i:=0 to DBGrid1.Columns.Count-1 do
begin
//取得与DBGrid显示列的数据库中的列名称
FieldName:=DBGrid1.Columns[i].FieldName;
//取得DBGRid显示的标题名称
//注:数据库列表不一定与标题名相同,这种情况下为了与DBGrid的显示一致,需要
// 以DBGrid的列标题名称作为显示数据
DispName:=DBGrid1.Columns[i].Title.Caption;
Str:=Str+DispName+'='+FieldByName(FieldName).AsString+#13#10;
end;
ShowMessage(Str);
end;
end;[code]
以DBGrid的列标题名称作为显示数据 ,还有一种情况,即数据集的列数量多于DBGrid的显示列数量,这种情况下决定了不能使用数据集的列作为循环条件,而必须使用DBGrid的显示列作为条件。这两种情况下以上代码都是适用的。另外一种情况就是DBGrid本身的某些列没有显示(使用DBGrid1.Columns[i].Visible:=False隐藏掉了),这种情况下对上述代码需要做些调整:取得列的信息时,需要判断此列是否可见,如果可见再读取其列的值,否则不做处理。