在DBGrid录数据时,如何判断光标位置是在数据的最左或最右,如果是最左或最右则在按左右光标键时光标跳到上一格或下一格,如果是在数据中间则在数据内移动,怎样做到这样的效果?

解决方案 »

  1.   

    非常简单:
    1)DBGrid有一个SelectedIndex可以确定是在最左还是最右;
    2)在最左最右时,使用DBGrid1.DataSource.DataSet.Prior(或Next).
      

  2.   

    dbgrid1.SelectedIndex  //当前光标位置
    dbgrid1.Columns.Count-1=dbgrid1.SelectedIndex  //最右位置
    dbgrid1.selectedindex=0  //最左位置
      

  3.   

    下面是一个在DBGrid1按回车键的
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    var
        EndCol : Integer;
    begin
        EndCol := DBGrid1.Columns.Count - 1;
        if Key = #13 then
        begin
            Key := #0;
            with DBGrid1.DataSource.DataSet do
            begin
                 if DBGrid1.SelectedIndex <> EndCol then
                 begin
                      DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
                 end
                 else
                 begin
                      Next;
                      if not Eof then
                      begin
                           DBGrid1.SelectedIndex := 0;
                      end;
                 end;
            end;
        end;
    end;
      

  4.   

    总之就是在DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + ???;上下工夫,可以变换出很多种方法。
      

  5.   

    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    var
        EndCol : Integer;
    begin
        EndCol := DBGrid1.Columns.Count - 1;
        if Key = VK_RIGHT then
        begin
            with DBGrid1.DataSource.DataSet do
            begin
                 if DBGrid1.SelectedIndex <> EndCol then
                 begin
                      DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
                 end
                 else
                 begin
                      Next;
                      if not Eof then
                      begin
                           DBGrid1.SelectedIndex := 0;
                      end;
                 end;
            end;
        end;    if key = VK_LEFT then
        begin
            with DBGrid1.DataSource.DataSet do
            begin
                 if DBGrid1.SelectedIndex <> 0 then
                 begin
                      DBGrid1.SelectedIndex := DBGrid1.SelectedIndex - 1;
                 end
                 else
                 begin
                   try
                     Prior;
                   except
                   end; 
                 end;
            end;
        end;
    end;
      

  6.   

    诸位:问题的关键在于如何判断光标是在数据的中间或是最左最右,如果只是DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1;这么简单我就不用来提问了,看过精诚商务系统的朋友就会知道我问的是什么。
      

  7.   

    SelStart属性DBGrid以及Columns、Field都没有这个属性。
    关注!