我用adoquery连了一个dbgrid,想用edit+button做一个搜索功能,就是对dbgrid中显示的记录进行查找,如果该记录中的某个字段包含edit.text,那么将该记录用其他颜色显示。说明:dbgrid中的内容是可以动态更新的,所以dbgrid中的字段数量和他们的类型都是可以动态变化的(不确定)。
还有个小问题,就是我没对dbgrid进行任何设置就用来显示内容,发现有时候一个字段会占很宽的位置,有没有一种方法使它的宽度自动适合内容的宽度阿!!!
谢谢各位!万望不吝赐教!!
还有个小问题,就是我没对dbgrid进行任何设置就用来显示内容,发现有时候一个字段会占很宽的位置,有没有一种方法使它的宽度自动适合内容的宽度阿!!!
谢谢各位!万望不吝赐教!!
解决方案 »
- 本人想换工作
- dspack如何实现 WMV视频 播放从时间点m到时间点n的视频呢
- delphi 2009 怎么样调用DLL 问题
- dbgrid循环问题
- delphi下sql server 多关键字(用空格分开)查询,有点人工智能的意思了。
- 用到teechart7.0,打包时应怎么做?还是只需要主程序即可?谢谢!
- image1覆盖image2,image1中间为透明可以看到image2,我想把他们合为一张图片,该如何解决?
- 如何捕捉windows的delete动作(删除操作)??
- 这个问题基本上,很难!!在线……
- delphi中缺省的有几种光标,分别是什么?在线给分
- 求avi to vcd 的控件
- 如何得到网页中所有元素或指定控件类型(如IHTMLSelectElement或IHTMLSelectElement)的名称?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
function NewTextWidth(fntFont: TFont; const sString: OpenString): integer;
function iCalcGridWidth(dbg: TDBGrid): integer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function TForm1.NewTextWidth(fntFont: TFont; const sString: OpenString): integer;
{根据程序默认系统取得文字所需宽度值}
var
fntSave: TFont;
begin
result := 0;
fntSave := Application.MainForm.Font;
Application.MainForm.Font := fntFont;
try
result := Application.MainForm.Canvas.TextWidth(sString);
finally
Application.MainForm.Font := fntSave;
end;
end;function TForm1.iCalcGridWidth(dbg: TDBGrid): integer;
{指定TDBGrid名称计算所需显示宽度}
const
cMEASURE_CHAR = '0';
iEXTRA_COL_PIX = 4;
iINDICATOR_WIDE = 11;
var
i, iColumns, iColWidth, iTitleWidth, iCharWidth: integer;
//分别代表字段数,列数,列宽,列标题宽,字宽
begin
iColumns := 0;
result := GetSystemMetrics(SM_CXVSCROLL);
//得到系统滚动条的大小
iCharWidth := NewTextWidth(dbg.Font, cMEASURE_CHAR);
with dbg.dataSource.dataSet do
for i := 0 to FieldCount - 1 do
with Fields[i] do
if visible then{字段是否可视}
begin
iColWidth := iCharWidth * DisplayWidth;
if dgTitles in dbg.Options then
begin
iTitleWidth := NewTextWidth(dbg.TitleFont, DisplayLabel);
if iColWidth < iTitleWidth then
iColWidth := iTitleWidth;
end;
inc(iColumns, 1);
inc(result, iColWidth + iEXTRA_COL_PIX);
end;
if dgIndicator in dbg.Options then
begin
inc(iColumns, 1);
inc(result, iINDICATOR_WIDE);
end;
if dgColLines in dbg.Options then
inc(result, iColumns)
else
inc(result, 1);
end;procedure TForm1.FormCreate(Sender: TObject);
var
W, i: Integer;
begin
ADOTable1.Active := True;
W := 0;
for i := 0 to DBGrid1.Columns.Count - 1 do //遍历数据列累加宽度
W := W + DBGrid1.Columns[i].Width + 4; //增加必要的值协调右边框余值
DBGrid1.ClientWidth := W; //设置宽度
Self.ClientWidth := (DBGrid1.Left * 2) + DBGrid1.Width; //调整窗体宽度
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(IntToStr(iCalcGridWidth(DBGrid1)));//统计DBGIRD所需宽度方法
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Showmessage(Inttostr(DBGrid1.Width));//显示当前DBGIRD宽度
end;procedure TForm1.Button3Click(Sender: TObject);
begin
ADOTable1.Active := not ADOTable1.Active; //打开关闭数据库显示
end;end.
我搜了,但没有很合适的.我刚开始学,不怎么会灵活应用,恳请高手给点我这问题的代码吧(包括对dbgrid的搜索),谢谢,
显示颜色的我给你一段参考代码吧 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i:real;
begin
if ..... then
begin
DbGrid1.Canvas.Brush.Color:=clRed //你想要显示的颜色
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
end;