如何使DBGrid中被修改过数据的行自动被选中,
是使用DBGrid.SelectedRows,
还是ADOquery.Book,
或者其它什么的,请各位指点一二,谢谢!

解决方案 »

  1.   

    to  qiujsh(四大皆空) 
    你指的是ADOquery的Book吗?
    但是在更改DBGrid时如何联系到ADOquery.Book上?
    可以给我一个例子吗?谢谢
      

  2.   


    procedure GetSelectedRecord
        (DataSet : TDataSet; FieldName : String;
          BookList : TBookList; Strings : TStrings);
    //这个过程中的参数分别为:数据表、字段名称、
     书签、用来保存所选字段内容的
    //字符串(用于将内容传递到另
      一个单独窗体中的TLIST控件中)
    var
      I: Integer;
      bm : TBookMark;
    begin
      Strings.Clear;
      with Dataset do  begin
        DisableControls;
        bm := GetBookMark;
        try
    //每个选择的记录都有一个书签标志,
      这就为处理它们提供了条件
         for I := 0 to BookList.Count - 1 do  begin
           Book := BookList[I];
           Strings.Add(DataSet.FindField(fieldname).AsString);
          end;
        finally
          GotoBookMark(bm);
          FreeBookMark(bm);
          EnableControls;
        end;
      end;
    end;调用举例:
      GetSelectedRecord(Table1, 'NAME', DBGrid1.SelectedRows, 
         Form2.ListBox1.Items);
      

  3.   

    用DBGrid.SelectedRows应该也可以吧,
    DBGrid的数据源修改后,如果没有刷新,指针就是当前修改的记录,
    让那条记录选中就行了。
      

  4.   

    to okgxs(一叶风铃)
    这样的方法我明白
    我得意思是,在一个DBGrid中有若干条记录,当我修改其中的一部分记录时这些记录就会自动的被选中,也就是添加到DBGrid.SelectedRows中,但是我认为DBGrid.SelectedRows是只读的,我并没有找到将修改过的记录添加到DBGrid.SelectedRows中的方法
    谢谢!
      

  5.   

    to ixingarden(心愿)
    我也是想修改DBGrid.SelectedRows,但是DBGrid.SelectedRows好像是只读的,我没有找到修改DBGrid.SelectedRows的方法
    DBGrid.SelectedRows可以修改吗?
    谢谢!
      

  6.   

    明白你的意思。
    AdoQuery.Book后, DBGrid中的当前行应该自动添加到SelectRows.
    问题的关键是怎样知道 DBGrid 的当前行是否被修改了。由于是单向数据集,不能通过数据集判断。
    很麻烦。
      

  7.   

    to wilowind(无风雪亦飘)
    我现在是通过一个动态数组来进行比较的
    当adoquery查询出来后用动态数组来记录每条要修改数据的初始值,动态数组的下标于数据集一一对应修改之后进行比较,可以看出那条数据进行了修改
    之后如何将修改的记录添加到DBGrid.SelectedRows里就不知道如何实现了
    谢谢!
      

  8.   

    书签可以实现,不过adoquery.location['','',''],具体怎么写也忘记了,大概这样,楼主再查查资料吧
      

  9.   

    to wenjianyao(建) 
    你指的是ADOQuery1.Locate吧?
    ADOQuery1.Locate的用法我大概看了一下,但是用ADOQuery1.Locate能选中多行吗?
    我想要实现的是所有改过的数据全部自动选中这样可以吗?
    能再说的详细点吗?不胜感激。
      

  10.   

    哦哦哦,太容易了.
    下面代码把数据集bldData所有记录都加入SelectedRows。 你改一下
    dgBld是DBGrid, bldData 是它的数据集procedure TBuildingForm.Button1Click(Sender: TObject);
    begin
      bldData.First;
      while not bldData.Eof do begin
        dgBld.SelectedRows.CurrentRowSelected := true;
        bldData.Next;
      end;
    end;