DBGrid的小用法!
<P>varW1: array of Integer;
W2: array of Integer;</P>
<P>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
var
colwidth,Max:Integer;
begin
colwidth:=5;
Max:=5;
if not(Column.Field is TBlobField ) then
Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
else
begin
Column.width := max+50;
exit;
end;
with Tadotable(Column.Field.DataSet) do
begin
case number of
1: begin
case Column.ID of
3: begin
if(w1*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w1*8+5;
end;
4: begin
if(w1*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w1*8+5;
end;
7: begin
if(w1*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w1*8+5;
end;
else
begin
first;
while not eof do
begin
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
Max:=math.Max(colwidth,Max);
Next;
end;
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width := Max+5;
end;
end;
end;
2: begin
case Column.ID of
4: begin
if(w2*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w2*8+5;
end;
5: begin
if(w2*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w2*8+5;
end;
6: begin
if(w2*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width :=w2*8+5;
end;
else
begin
first;
while not eof do
begin
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
Max:=math.Max(colwidth,Max);
Next;
end;
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
else
Column.width := Max+5;
end;
end;
end;
end;
end;
end;</P>
<P>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
begin
Orderby(suiDBGrid2,Column,2);
end;</P>
<P>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
DrawString : String;
sys:TSysOper;
begin
if (gdSelected in State)then
begin
suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
end
else
suiDBGrid1.Canvas.Brush.Color:=clWindow;
sys:=TSysOper.Create;
try
if Column.Field.IsNull=false then
begin
case DataCol of
3: begin
DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
w1:=math.max(Length(DrawString),w1);
end;
4: begin
DrawString:=sys.getLoginMode(Column.Field.CurValue);
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
w1:=math.max(Length(DrawString),w1);
end;
7:begin
DrawString:=TimeFormat(Column.Field.CurValue);
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
w1:=math.max(Length(DrawString),w1);
end;
else
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end
else
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
finally
sys.Free;
end;
end;</P>
<P>上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P>
页:
[1]