您的位置:首页 > 其它

EhLib实现自动编号功能

2006-11-03 17:58 323 查看
先进行以下设置
DBGridEh1.SumList.active := true;
DBGridEh1.SumList.VirtualRecords := true;
然后增加一列,不要关联字段

增加以下代码
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
if Column.Index = 0 then
if DBGridEh1.SumList.RecNo <> -1 then
DBGridEh1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
IntToStr(DBGridEh1.SumList.RecNo));
end;
Ok!
Good Luck;

注:这是从网上看来的,我只加了一个判断。不然会出现-1的情况,看起来不好看。


解决打印时没有序号的方法: cs1 是 TClientDataSet
1.右击cs1,添加一个字段 No 是 string(10)
object cs1: TClientDataSet
Aggregates = <>
Params = <>
AfterScroll = cs1AfterScroll
Left = 40
Top = 80
object cs1GoodsName: TStringField
FieldName = 'GoodsName'
end
object cs1GoodsNumber: TIntegerField
FieldName = 'GoodsNumber'
end
object cs1No: TStringField
FieldName = 'No'
Size = 10
end
end

procedure TForm1.cs1AfterScroll(DataSet: TDataSet);
begin
if DBGridEh1.SumList.RecNo <> -1 then
begin
cs1.Edit;
cs1.FieldByName('no').AsString :=IntToStr(DBGridEh1.SumList.RecNo);
end;
end;

procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
DBGridRecordSize(Column);
if Column.Index = 0 then
if (DBGridEh1.SumList.RecNo <> -1) then
if (DBGridEh1.SumList.RecNo = 0 ) then
DBGridEh1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
IntToStr(1))
else
DBGridEh1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
IntToStr(DBGridEh1.SumList.RecNo));
end;

//PrintView
procedure TForm1.PrintView1Click(Sender: TObject);
begin
DBGridEh1.Columns[0].FieldName := 'no';
self.PrintDBGridEh1.Preview;
DBGridEh1.Columns[0].FieldName := '';
end;

//导出Excel
uses ComObj;

procedure TForm1.oExcel1Click(Sender: TObject);
var
i,j : Integer;
Excelid,xl: Variant;
s : string;
begin
inherited;
if cs1.RecordCount <= 0 then exit;
try
Excelid:=CreateOleObject('Excel.Application' );
except
on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL')
end;
Excelid.Visible := True;
Excelid.WorkBooks.Add;
Excelid.caption := '演示程序';
Excelid.worksheets[1].range['A1:C1'].Merge(True);
Excelid.WorkSheets[1].Cells[1,1].Value := '演示程序';
Excelid.worksheets[1].range['A1:C2'].HorizontalAlignment := $FFFFEFF4;
Excelid.worksheets[1].range['A1:C2'].VerticalAlignment := $FFFFEFF4;
//设置样式
Excelid.worksheets[1].Range['A1:C1'].Font.Name := '宋体';
Excelid.worksheets[1].Range['A1:C1'].Font.Size := 18;
Excelid.worksheets[1].Range['A1:C2'].Font.bold:=true;
//设置列宽
Excelid.worksheets[1].Columns[1].ColumnWidth := 5;
Excelid.worksheets[1].Columns[2].ColumnWidth := 10;
Excelid.worksheets[1].Columns[3].ColumnWidth := 10;
//写标题
i:=2;
Excelid.WorkSheets[1].Cells[i,1].Value := '序号';
Excelid.WorkSheets[1].Cells[i,2].Value := '商品名称';
Excelid.WorkSheets[1].Cells[i,3].Value := '商品数量';
//写值
i := 3;
CS1.First;
while not cs1.eof do
begin
Excelid.WorkSheets[1].Cells[i,1].Value := cs1.FieldByName('no').AsString;
Excelid.WorkSheets[1].Cells[i,2].Value := cs1.FieldByName('GoodsName').AsString;
Excelid.WorkSheets[1].Cells[i,3].Value := cs1.FieldByName('GoodsNumber').AsString;

cs1.Next;
Inc(i);
end;
s := 'A2:C'+IntToStr(i-1);
Excelid.worksheets[1].Range[s].HorizontalAlignment := $FFFFEFF4;
Excelid.worksheets[1].Range[s].VerticalAlignment := $FFFFEFF4;
//显示边框
Excelid.worksheets[1].Range[s].Borders.LineStyle := 1;
end;

例子在盒子上:
http://www.2ccc.com/article.asp?articleid=3764
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: