繁体   English   中英

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

[英]How to take a value from row 1, row 2, row 3 in column 3 using DBGrid?

在Delphi中,我有一个组件:

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但是没有“ Second或“ Third属性,因此必须忽略属性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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM