如何使用 DBGrid 从第 3 列的第 1 行、第 2 行、第 3 行中获取值



在德尔福,我有一个组件:

dbgridsimpipa: Tdbgrid,
DSpipa: Tdatasource,
Qpipa: Tquery,
btnViewdata: tbutton
btnRecNumber: tbutton.

我用以下代码搜索表:

procedure TfrmMain.btnViewDataClick(Sender: TObject);
var
  st,st4,y0,y1,y2: string;
begin
  st:='5';
  grid2.Enabled := True;
  st5 := 'SELECT tblRekapROT.CY2IDR, tblRekapROT.Produk, tblRekapROT.Total,         tblRekapROT.ARRWL, tblRekapROT.ARBYL, tblRekapROT.Status '+
  'FROM tblRekapROT '+
  'WHERE ((tblRekapROT.Status Like  ''%'+st+'%''))';
   Qpipa.Close;
   Qpipa.SQL.Clear;
   Qpipa.SQL.Add(st5);
   Qpipa.Open;
   label22.Caption:= dbgridsimpipa.Fields[0].AsString;
end;

然后我DBGrid

procedure TfrmMain.btnRecNumberClick(Sender: TObject);
var
  vCount: Integer;
  vBookmark: TBookmark;
begin
  vCount := 0;
  with DBGridSimPipa.DataSource.DataSet do
  begin    
    vBookmark := GetBookmark;
    First;  // move to the first record
    while not EoF do
    begin
      vCount := vCount + 1;      
      Next;                   // move to next record
    end;
    GotoBookmark(vBookmark);
    FreeBookmark(vBookmark);
  end;  
  ShowMessage('We found ' + IntToStr(vCount) + ' records');
end;

如何在一列中获取DBGrid行的值?也许是这样的:

//label1.Caption:= dbgridsimpipa.DataSource.DataSet.First          //record vtotal row 1
   //label2.Caption:= dbgridsimpipa.DataSource.DataSet.second         //record vtotal row 2
   //label3.Caption:= dbgridsimpipa.DataSource.DataSet.third           //record vtotal row 3

这是我的程序的屏幕截图。

首先欢迎来到 StackOverflow。

您对数据集的工作原理有一些误解。首先,如果你想知道你找到了多少行,你可以调用 RecordCound 属性:

procedure TfrmMain.btnRecNumberClick(Sender: TObject);
begin      
  ShowMessage('We found ' + IntToStr(DBGridSimPipa.DataSource.DataSet.RecordCount) + ' records');
end;

如果要访问数据集中的第一行,可以调用First但没有SecondThird属性,因此您必须将属性RecordNo

DataSet.FirstDataset.RecordNo := 0相同

您通过调用Dataset.RecordNo := 1等获得的第二行。

您想将一行的内容放入标签中。没有内置的方式来做到这一点,所以你必须为此编写自己的函数。

function DataRowToString(const aDataset: TDataSet; aRecNo: Integer): String;
var
  i: Integer;
begin
  aDataset.RecNo := aRecNo;
  Result := '';
  for i := 0 to aDataset.FieldCount - 1 do
    Result := Result + aDataset.Fields[i].AsString + ' ';
  Result := Trim(Result);
end;

最后我们只需要调用新创建的函数:

label1.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 0); //record vtotal row 1
label2.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 1); //record vtotal row 2
label3.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 2);//record vtotal row 3

最新更新