如题啦,现在做项目碰到个难题,想要通过双击dbgrid的其中具体一列,然后跳出个新的窗口。窗口中的信息就是dbgrid这一列的信息,比分编号,姓名,成绩等。

解决方案 »

  1.   


    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      ShowMessage(Column.Field.FieldName);//这里可以知道点击的是那里一列,就是Column
    end;然后在双击事件中根据这个参数去做处理
      

  2.   

    如果确如楼主所描述的问题,答案如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;
      

  3.   

    在procedure TForm1.DBGrid1DblClick(Sender: TObject) 
    下面写事件,然后再根据DBGrid1.DataSource.Dataset当前的条目去找你要显示的信息
      

  4.   

    不好意思,可能没表达清楚,我dbgrid1显示一个表
    信息如下:
    编号  姓名   班级   成绩然后双击的是某一行,弹出个新窗口,窗口里面包含这一行的全部信息,让人一目了然比方双击之后,变成 
    001       张三 
    2(1)班  100分
      

  5.   

    晕,刚才没注意,居然换了个马甲呵呵,wooden954,如何改为取得一行的信息?
      

  6.   

    如果楼主没有其它要求,我认为最后把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]
      

  7.   

    除了上述代码中的情况外,即数据库列表不一定与标题名相同,这种情况下为了与DBGrid的显示一致,需要 
    以DBGrid的列标题名称作为显示数据 ,还有一种情况,即数据集的列数量多于DBGrid的显示列数量,这种情况下决定了不能使用数据集的列作为循环条件,而必须使用DBGrid的显示列作为条件。这两种情况下以上代码都是适用的。另外一种情况就是DBGrid本身的某些列没有显示(使用DBGrid1.Columns[i].Visible:=False隐藏掉了),这种情况下对上述代码需要做些调整:取得列的信息时,需要判断此列是否可见,如果可见再读取其列的值,否则不做处理。