用户名:  密码:   
您当前的位置:首页 > 程序设计 >  Delphi > 

DBGrid控件的使用

上次修改时间: 2024-01-10 14:51:32      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\Delphi语言\常用控件之数据库控件与操作相关\      下一页

1. 在DataSource中选择要显示的数据源
2。 在Columns中设置要显示的字段,列宽,别名,对齐等


获取当前行的指定字段的值,这里获取当前行linkaddr字段的值
ShowMessage(DBGrid2.DataSource.DataSet.FieldValues['linkaddr']);

获取选择记录的序号或者说DBgrid的行号
howMessage(IntToStr(DBGrid2.DataSource.DataSet.RecNo));

设置Hint提示
1. 在hint属性时输入要提示的内容
2. 还要给弹出提示的条件加入开启显示提示的代码,例在OnCellClick事件里加入DBGrid1.ShowHint:=True;

最优:
//窗体宽度改变后,将增加的宽度平均分配到各列,调用:FixDBGridColumnWidth(DBGrid2)
procedure FixDBGridColumnWidth2(const DBGrid: TDBGrid);
var
  i: Integer;
  cusWidth: Integer; //改变窗体大小后,数据表格宽度
  varWidth: Integer; //每列宽度
  totColumns: Integer; //用来存储总的列数
  sumWidth:integer;
begin
  totColumns := 0;
  cusWidth := Abs(DBGrid.ClientWidth);
  for i := 0 to -1 + DBGrid.Columns.Count do //该for循环计算总的列数
  begin
    Inc(totColumns);
  end;

  sumWidth:=0;   //要赋初值,否则出错
  for i:= 0 to DBGrid.columns.count-1 do   //循环计算所有列的宽度
  begin
 sumWidth:= sumWidth+ DBGrid.columns[i].width;
  end;

  varWidth := (cusWidth-sumWidth) div  totColumns;
  if cusWidth>sumWidth then
  begin
 for i := 0 to DBGrid.columns.count-1 do
   DBGrid.columns[i].width := DBGrid.columns[i].width +  varWidth;
  end;
end;

//根据内容自动调整DBGrid列宽的过程,要求先绑定数据集才能调用,还有列字段的顺序必须同数据库表的字段的顺序对应,
//MakeDBGridColumnsAutoFixItsWidth(DBGrid1))
procedure MakeDBGridColumnsAutoFixItsWidth(objDBGrid:TDBGrid);
var
cc:integer;
i,tmpLength:integer;
objDataSet:TDataSet;
aDgCLength:array of integer;
begin
cc:=objDbGrid.Columns.Count-1; //获取栏目数
objDataSet:=objDbGrid.DataSource.DataSet; //指定数据源为形参的数据源
setlength(aDgCLength,cc+1);  //设置数组aDgCLength的个数
for i:=0 to cc do
begin
    aDgCLength[i]:= length(objDbGrid.Columns[i].Title.Caption);
end;
objDataSet.First;  //移动到第一条数据
while not objDataSet.Eof do  //遍历所有数据行计算每个字段的长度将最大长度存储到aDgClentgh数组中
begin
    for i:=0 to cc do
    begin
      tmpLength:=length(objDataSet.Fields.Fields[i].AsString);
      if tmpLength>aDgCLength[i]
      then aDgCLength[i]:=tmpLength;
    end;
    objDataSet.Next;
end;
for i:=0 to cc do //根据aDgCLentgh中的最大长度设置第列的宽度
begin
    objDbGrid.Columns[i].Width:=aDgCLength[i]*7; //默认表格中1字符的宽度为7像素
end;
end;

//平均分配各列的宽度过程,调用:FixDBGridColumnWidth(DBGrid2)
procedure FixDBGridColumnWidth(const DBGrid: TDBGrid);
var
  i: Integer;
  cusWidth: Integer; //改变窗体大小后,数据表格宽度
  varWidth: Integer; //每列宽度
  totColumns: Integer;
begin
  totColumns := 0;
  cusWidth := Abs(DBGrid.ClientWidth);
  for i := 0 to -1 + DBGrid.Columns.Count do
  begin
    Inc(totColumns);
  end;
  varWidth := cusWidth div totColumns;
  for i := 0 to DBGrid.Columns.Count - 1 do
  begin
    if i = DBGrid.Columns.Count - 1 then
    begin
      DBGrid.Columns[i].Width := varWidth - 16;
    end
    else
    begin
      DBGrid.Columns[i].Width := varWidth;
    end;
  end;
end;

//将最后一列宽度设为最宽,调用:FixDBGridColumnWidth(DBGrid2)
procedure FixDBGridColumnWidth2(const DBGrid: TDBGrid);
var
  i: Integer;
  cusWidth: Integer; //改变窗体大小后,数据表格宽度
  varWidth: Integer; //每列宽度
  totColumns: Integer; //用来存储总的列数
  sumWidth:integer;
begin
  totColumns := 0;
  cusWidth := Abs(DBGrid.ClientWidth);
  for i := 0 to -1 + DBGrid.Columns.Count do //该for循环计算总的列数
  begin
    Inc(totColumns);
  end;
  varWidth := cusWidth div totColumns;
 
  for i:= 0 to DBGrid.columns.count-1 do
  begin
 sumWidth:= sumWidth+ DBGrid.columns[i].width;
  end
 
  if cusWidth>sumWidth then
  begin
 for i := 0 to DBGrid.columns.count-1 do
 DBGrid.columns[i].width := DBGrid.columns[i].width+ (cusWidth-sumWidth) div  totColumns;
  end;
end;