delphi cxgrid exce下拉l筛选过滤全选(delphi 中 怎么用cxgrid 实现 类似excel的 选中多个框 下面会出来框内数据的和)

本文目录
- delphi 中 怎么用cxgrid 实现 类似excel的 选中多个框 下面会出来框内数据的和
- 在delphi2010中如何清空TcxGrid中的数据
- delphi cxgrid
- [delphi]如何调用excel文档
- delphi中stringgrid中我想通过点击fixedrows设置的固定行选中一整行,类似excel,
- delphi中cxgrid cheackbox 多选
- delphi中,cxgrid怎样将选中的单元格都赋为选中的第一行的值,并且数据集也同步更新
- Delphi Cxgrid怎么有选择的导出到Excel
- delphi 对CXGrid的行操作
delphi 中 怎么用cxgrid 实现 类似excel的 选中多个框 下面会出来框内数据的和
View,我们看到的诸如表格等可视的界面,都是View。并且当你拖放一个cxGrid到窗体上时,会自动创建一个View。
因此要连接数据库,就不是对cxGrid进行操作,而是对View进行操作。你在设计期的cxGrid里应该能看到一个小方框,里面有个叫XXXXView的名字,点它,然后在属性设计器里找DataBinding,里面就可以设置数据库连接了。
在delphi2010中如何清空TcxGrid中的数据
不用理grid,直接操作dataset
如果你知道是哪个dataset比如adoquery1
直接
close;
sql.text:=’xxxxx’;
open;
就完了
如果dataset可能会变化,想写通用的
cxgrid有个child叫TableView(这个东西分好几种,具体看设置)这个是显示数据用的,IDE左边显示组件的treeview里能看到,或者在cxgrid右下角有带下划线的tableview名字可以选择
类似cxGrid1DBTableView1这样
它有个属性是 DataController,它有子属性DataSource,到这里就认识了吧
跟操作其他dataset一样
举个例子:
cxGrid1有个cxGrid1DBTableView1
那就可以直接写
cxGrid1DBTableView1.DataController.DataSource.Dataset.close
delphi cxgrid
双击“cxgrid”后,弹出界面;右半部的窗口有个“Sunmmary”标签项,点击“Add”,会添加一行TxcGridDBTableSunmmaryItem项,在左边的属性栏中找到“Column”选择要进行合计的字段。再找到“Kind”的属性,选择Sum/Max/Min/average你想要的合计类型。Format属性是格式化你合计后显示的结果例如0.000 就是保留3位小数。另外双击“cxgrid”后,再属性栏中找到“optionview”属性,里面有个“Foot”选项设置为True;
[delphi]如何调用excel文档
Delphi&Excel
一) 使用动态创建的方法
首先创建 Excel 对象,使用ComObj:
var ExcelApp: Variant;
ExcelApp := CreateOleObject( ’Excel.Application’ );
1) 显示当前窗口:
ExcelApp.Visible := True;
2) 更改 Excel 标题栏:
ExcelApp.Caption := ’应用程序调用 Microsoft Excel’;
3) 添加新工作簿:
ExcelApp.WorkBooks.Add;
4) 打开已存在的工作簿:
ExcelApp.WorkBooks.Open( ’C:\Excel\Demo.xls’ );
5) 设置第2个工作表为活动工作表:
ExcelApp.WorkSheets.Activate;
或
// ExcelApp.WorksSheets.Activate;
6) 给单元格赋值:
ExcelApp.Cells.Value := ’第一行第四列’;
7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns.ColumnsWidth := 5;
8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows.RowHeight := 1/0.035; // 1厘米
9) 在第8行之前插入分页符:
ExcelApp.WorkSheets.Rows.PageBreak := 1;
10) 在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns.PageBreak := 0;
11) 指定边框线宽度:
ExcelApp.ActiveSheet.Range.Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )
12) 清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells.ClearContents;
13) 设置第一行字体属性:
ExcelApp.ActiveSheet.Rows.Font.Name := ’隶书’;
ExcelApp.ActiveSheet.Rows.Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows.Font.Bold := True;
ExcelApp.ActiveSheet.Rows.Font.UnderLine := True;
14) 进行页面设置:
a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader := ’报表演示’;
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter := ’第&P页’;
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
另外的
ews1.PageSetup.Orientation := xlLandscape; //横向打印
ews1.PageSetup.Zoom := false; //不使用缩放比例(即使用调整成x页宽,x页高);
ews1.PageSetup.FitToPagesWide := 2; //调整成2页宽
ews1.PageSetup.FitToPagesTall := 1; //调整成1页高
Printer.Orientation = vbPRORPortrait’横向
Printer.Orientation = vbPRORLandscape’纵向
15) 拷贝操作:
a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range.Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range..PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows.Insert;
b. ExcelApp.ActiveSheet.Columns.Insert;
17) 删除一行或一列:
a. ExcelApp.ActiveSheet.Rows.Delete;
b. ExcelApp.ActiveSheet.Columns.Delete;
18) 打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;
19) 打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;
20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveSheet.PrintPreview;
21) 工作表另存为:
ExcelApp.SaveAs( ’C:\Excel\Demo1.xls’ );
22) 放弃存盘:
ExcelApp.ActiveWorkBook.Saved := false;
23) 关闭工作簿:
ExcelApp.WorkBooks.Close;
24) 退出 Excel:
ExcelApp.Quit;
(二) 使用Delphi 控件方法
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
1) 打开Excel
ExcelApplication1.Connect;
2) 显示当前窗口:
ExcelApplication1.Visible:=True;
3) 更改 Excel 标题栏:
ExcelApplication1.Caption := ’应用程序调用 Microsoft Excel’;
4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;
6) 打开已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
7) 设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets.Activate; 或
ExcelApplication1.WorksSheets.Activate;
8) 给单元格赋值:
ExcelApplication1.Cells.Value := ’第一行第四列’;
9) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns.ColumnsWidth := 5;
10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows.RowHeight := 1/0.035; // 1厘米
11) 在第8行之前插入分页符:
ExcelApplication1.WorkSheets.Rows.PageBreak := 1;
12) 在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns.PageBreak := 0;
13) 指定边框线宽度:
ExcelApplication1.ActiveSheet.Range.Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )
14) 清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells.ClearContents;
15) 设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows.Font.Name := ’隶书’;
ExcelApplication1.ActiveSheet.Rows.Font.Color := clBlue;
ExcelApplication1.ActiveSheet.Rows.Font.Bold := True;
ExcelApplication1.ActiveSheet.Rows.Font.UnderLine := True;
16) 进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := ’报表演示’;
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := ’第&P页’;
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;
17) 拷贝操作:
a.拷贝整个工作表:
ExcelApplication1.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApplication1.ActiveSheet.Range.Copy;
c.从A1位置开始粘贴:
ExcelApplication1.ActiveSheet.Range..PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApplication1.ActiveSheet.Range.PasteSpecial;
18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows.Insert;
b. ExcelApplication1.ActiveSheet.Columns.Insert;
19) 删除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows.Delete;
b. ExcelApplication1.ActiveSheet.Columns.Delete;
20) 打印预览工作表:
ExcelApplication1.ActiveSheet.PrintPreview;
21) 打印输出工作表:
ExcelApplication1.ActiveSheet.PrintOut;
22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
ExcelApplication1.ActiveSheet.PrintPreview;
23) 工作表另存为:
ExcelApplication1.SaveAs( ’C:\Excel\Demo1.xls’ );
24) 放弃存盘:
ExcelApplication1.ActiveWorkBook.Saved := True;
25) 关闭工作簿:
ExcelApplication1.WorkBooks.Close;
26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
(三) 使用Delphi 控制Excle二维图
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
var asheet1,achart, range:variant;
1)选择当第一个工作薄第一个工作表
asheet1:=ExcelApplication1.Workbooks;
2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);
3)选择二维图的形态
achart.chart.charttype:=4;
4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);
5)加上二维图的标题
achart.Chart.HasTitle:=True;
achart.Chart.ChartTitle.Characters.Text:=’ Excle二维图’
delphi中stringgrid中我想通过点击fixedrows设置的固定行选中一整行,类似excel,
可以的,,除了不能合并单元格外,其它大部分功能都能做得与EXCEL差不多.
1、将Options属性中的,goFixedColClick选中为true.这是为了使FIXED事件起作用。
2、FixedCellClick事件中,判断是否点到左边表头。
3、将那一行都设为选中状态就行了。
procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol,
ARow: Integer);
var
mRect: TGridRect;
begin
if (ACol = 0) and (ARow 《》 0) then
begin
mRect.Left:= 1;
mRect.Right:= StringGrid1.RowCount - 1;
mRect.Top:= ARow;
mRect.Bottom:= ARow;
StringGrid1.Selection:= mRect;
end;
end;
同理,还能做选中一列,选中最左上那一格时选中所有。
delphi中cxgrid cheackbox 多选
在 Properties 的 OnEditValueChanged 事件写代码:
将当前行的主键值记录下来
Qry过滤,Filter := ’Check字段 =True’
将过滤出来的记录 Check字段 全部修改为 False
根据第1步记录的主键值,定位回修改的那行,并将其 Check字段 修改为 True
大致代码如下
var
tmpKey: string;
begin
if not qry.FieldByName(’Check字段’).AsBoolean then
Exit;
tmpKey := qry.FieldByName(’key字段’).AsString;
qry.DisableControls;
try
qry.Filtered := False;
qry.Filter := ’Check字段 =True’;
qry.Filtered := True;
while not qry.IsEmpty then
begin
qry.Edit;
qry.FieldByName(’Check字段’).Value := False;
qry.Post;
end;
qry.Locate(’key字段’, tmpKey, );
qry.Edit;
qry.FieldByName(’Check字段’).Value := True;
qry.Post;
finally
qry.EnableControls;
end;
end;
delphi中,cxgrid怎样将选中的单元格都赋为选中的第一行的值,并且数据集也同步更新
比如我选中了一个区域,3行3列,点一下“设为相同值”,就将第2行和第3行中这3列的值设为和第一行一样,对表格批量修改时用到
procedure TForm1.btn5Click(Sender: TObject);
var
fceFieldName:string;
firFieldValue:Variant;
SavePlace: TBookmark;
begin
//cxGridDBTv1是TcxGridTableView
fceFieldName:=cxGridDBTv1.Columns.DataBinding.FieldName;
//cds1是类似于你的ADOQuery,Table,我也不知道你用的是什么,我这里是用的ClientDateSet做//例子
SavePlace:= cds1.GetBookmark;
cds1.DisableControls;
cds1.First;
firFieldValue:=cds1.FieldByName(fceFieldName).AsVariant;
cds1.GotoBookmark(SavePlace);
cds1.Edit;
cds1.FieldByName(fceFieldName).AsVariant:=firFieldValue;
cds1.Post;
cds1.EnableControls;
end;
Delphi Cxgrid怎么有选择的导出到Excel
首先在Uses处加上ComObjprocedureTForm1.Button1Click(Sender:TObject);varh,k:integer;Excelid:OleVariant;s:string;begintryExcelid:=CreateOLEObject(’Excel.Application’);exceptApplication.MessageBox(’Excel没有安装!’,’提示信息’,MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);Exit;end;tryADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add(’select*fromjj_department’);ADOQuery1.Open;k:=ADOQuery1.RecordCount;Excelid.Visible:=True;Excelid.WorkBooks.Add;Excelid.worksheets.Borders.LineStyle:=1;Excelid.Quit;exceptApplication.MessageBox(’导入数据出错!请检查文件的格式是否正确!’,’提示信息’,MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);end;MessageBox(GetActiveWindow(),’EXCEL数据导出成功!’,’提示信息’,MB_OK+MB_ICONWARNING);end;
delphi 对CXGrid的行操作
提供 DevExpress 官网对此问题提供的示例代码:
// DISABLE A ROW 禁止某行
procedure TForm1.cxGrid1DBTableView1Editing(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
var
AKeyValue : Variant;
begin
AKeyValue := Sender.DataController.GetRecordId(Sender.Controller.FocusedRecordIndex);
if (AKeyValue = ’1351’) or (AKeyValue = ’1356’) or (AKeyValue = ’1384’) then
AAllow := False;
end;
// MAKING A ROW READ ONLY 设置某行为只读
procedure TForm1.cxGrid1DBTableView1InitEdit(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit);
var
AKeyValue : Variant;
begin
{ AKeyValue := Sender.DataController.GetRecordId(Sender.Controller.FocusedRecordIndex);
if (AKeyValue = ’1351’) or (AKeyValue = ’1356’) or (AKeyValue = ’1384’) then
AEdit.ActiveProperties.ReadOnly := True;}
end;
// MAKING A ROW LOOK LIKE DISABLED 使某行为呈现为锁定状态
procedure TForm1.cxGrid1DBTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
AKeyValue : Variant;
begin
AKeyValue := Sender.DataController.GetRecordId(ARecord.RecordIndex);
if (AKeyValue = ’1351’) or (AKeyValue = ’1356’) or (AKeyValue = ’1384’) then
AStyle := cxDisableStyle;
end;

本文相关文章:
服务器虚拟化可以用到什么软件(类似VMware的国产虚拟化软件有哪些)
2026年7月4日 07:30
finder图标是哪个(mac有没有类似于“我的电脑”的地方 桌面东西太多了不知道放哪)
2026年6月1日 22:45
sketch格式用什么打开(windows有类似sketch的ui软件吗)
2026年1月15日 11:30
什么时候用xhtml(xhtml html该学哪一个是学了第一个还可以学第二个 两个都有好处吗 还是说两个用处有点类似)
2025年11月16日 23:30
更多文章:
decorate是什么意思(decorate是什么意思中文翻译)
2026年2月15日 15:15
编程python电脑配置(如何在win7下安装Python及配置)
2025年10月11日 19:30
原生activemq使用(如何使用activemq 管理页面)
2025年6月27日 15:45
connection常用属性(在delphi7中,ADOconnection与ADOQuery都是用来干什么的,有什么联系或者区别吗)
2026年3月25日 08:45
split hairs(don’t split hairs 翻译一下,要直译和引申义)
2026年8月23日 00:45
profitable什么意思(be beneficial for和be profitable for的区别)
2026年1月18日 11:45
switch可以连接笔记本吗(请问switch怎么投屏到笔记本上玩 switch投屏笔记本的操作方法 详细的教程,谢谢!)
2026年8月28日 18:45













