[Решено] Число выводимых строк в dbgrid?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] Число выводимых строк в dbgrid?

Сообщение jotto » 27.02.2014 22:12:20

Как узнать число выводимых строк в dbgrid? Заодно и номер текущей строки?
Последний раз редактировалось jotto 28.02.2014 11:22:47, всего редактировалось 1 раз.
jotto
новенький
 
Сообщения: 17
Зарегистрирован: 26.10.2010 10:44:20

Re: Число выводимых строк в dbgrid?

Сообщение Padre_Mortius » 27.02.2014 22:34:53

jotto, наверное нужно спросить у компонента, который организует выборку
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Число выводимых строк в dbgrid?

Сообщение MaratIsk » 28.02.2014 09:42:31

jotto писал(а):Как узнать число выводимых строк в dbgrid? Заодно и номер текущей строки?


а зачем? когда ответишь себе на этот вопрос поймешь, что незачем :)
MaratIsk
постоялец
 
Сообщения: 121
Зарегистрирован: 20.08.2009 18:15:20

Re: [Решено] Число выводимых строк в dbgrid?

Сообщение jotto » 28.02.2014 11:27:30

Число выводимых строк: (TCustomDrawGrid(DbGrid1).VisibleRowCount
Номер текущей строки : (TCustomDrawGrid(DbGrid1).Row

Для чего это мне надо? Не хочу, чтобы Dbgrid "скакал" после переоткрытия DataSet, кому интересно - вот "рыба"
Код: Выделить всё
// --------- Записи должны быть отфетчены--------------------
// Для лазаруса:
// RowCount :=   IntToStr(TCustomDrawGrid(DbGrid1).VisibleRowCount
// Row := IntToStr(TCustomDrawGrid(DbGrid1).Row
// -----------------------------------------------------------


unit sgpMain;

interface

uses
  Math,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, Buttons, IBCustomDataSet, IBQuery,
  IBDatabase, IBUpdateSQL, StdCtrls, ExtCtrls;

type

  TMyDBGrid = class(TDBGrid);

  TGridPos = record
    Row: Integer;
    RowCnt: Integer;
  end;

  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    sbtReOpen: TSpeedButton;
    sbtOK: TSpeedButton;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBQuery1: TIBQuery;
    DataSource1: TDataSource;
    rdgHow: TRadioGroup;
    procedure sbtReOpenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure sbtOKClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    function GetGridPos(Grid: TDBGrid): TGridPos;
    procedure SetGridPos(Grid: TDBGrid; gp: TGridPos);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  gridPos: TGridPos;
  recID: Int64;

implementation

{$R *.dfm}

function TForm1.GetGridPos(Grid: TDBGrid): TGridPos;
begin
  with Result do
  begin
    Row := TMyDBGrid(Grid).Row;
    RowCnt := TMyDBGrid(Grid).RowCount;
  end;
end;

procedure TForm1.SetGridPos(Grid: TDBGrid; gp: TGridPos);
var
  gOffSet, rOffSet: Integer;
begin
  with TIBQuery(Grid.DataSource.DataSet) do

{----------------------------------}
   if (RecordCount > gp.RowCnt) then
  begin
    FetchAll;
    rOffset := RecordCount - RecNo;
    gOffSet := (gp.RowCnt - 1 - gp.Row);
    MoveBy(gOffSet);
    gOffSet := - Min(gOffSet, rOffset);
    MoveBy(gOffSet);
  end;
{------------------или так-----------------}

     with TADOQuery(Grid.DataSource.DataSet) do
      if (gp.Row<=gp.RowCnt/2) then
      begin
         rOffset := RecordCount - RecNo;
         gOffSet := (gp.RowCnt - 1 - gp.Row);
         MoveBy(gOffSet);
         gOffSet := - Min(gOffSet, rOffset);
         MoveBy(gOffSet);
      end
      else
      begin
         rOffset := RecordCount - RecNo;
         gOffSet := (gp.Row - 1);
         ShowMessage(IntToStr(-gOffSet));
         MoveBy(-gOffSet);
         gOffSet := Max(gOffSet, rOffset);
         MoveBy(gOffSet);
         ShowMessage(IntToStr(-gOffSet));
      end;
{----------------------------------------------}

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  with IBDatabase1 do
  begin
    DatabaseName :=
     'LocalHost:C:\Program Files\Common Files\Borland Shared\Data\EMPLOYEE.GDB';
    Connected := True;
  end;
  with IBQuery1 do
  begin
    SQL.Text := 'SELECT EMP_NO, FULL_NAME FROM EMPLOYEE';
    Open;
  end;
  with rdgHow.Items do
  begin
    Clear;
    Add('Close-Open &#239;&#240;&#238;&#241;&#242;&#238;&#233;');
    Add('Close-Open &#241; Locate');
    Add('Close-Open&#241; Locate &#232; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229;&#236; &#239;&#238;&#231;&#232;&#246;&#232;&#232;');
  end;
end;

procedure TForm1.sbtReOpenClick(Sender: TObject);
begin
  with IBQuery1 do
  begin
    DisableControls;
    case rdgHow.ItemIndex of
1:    recID := IBQuery1.Fields[0].AsInteger;
2:    begin
        recID := IBQuery1.Fields[0].AsInteger;
        gridPos := GetGridPos(DBGrid1);
      end;
    end;
    Close;
    Open;
    case rdgHow.ItemIndex of
1:    Locate('EMP_NO', recID, []);
2:    if Locate('EMP_NO', recID, []) then
       SetGridPos(DBGrid1, gridPos);
    end;
    EnableControls;
  end;
end;

procedure TForm1.sbtOKClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IBDatabase1.Connected := False;
end;

end.
jotto
новенький
 
Сообщения: 17
Зарегистрирован: 26.10.2010 10:44:20


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 246

Рейтинг@Mail.ru