dbgrideh内容导出错误
lbview(fsxhtlb.DBGridEh1,fsxhtlb.ADOQuery2); //调用dbgrideh1字段自动添加过程
过程内容如下:
procedure lbview(dbeh:Tdbgrideh;ado:Tadoquery);
var i:integer; col : TColumnEh;
begin
for i:=0 to dbeh.Columns.Count -1 do
begin
dbeh.Columns.Clear;
end;
while not ado.Eof do
begin
col:=dbeh.Columns.Add;
col.Title.Caption:=ado.FieldValues['kjcaption'];
col.FieldName:=ado.FieldValues['fieldname'];
col.Width:=ado.FieldValues['width'];
col.ReadOnly:=true;
ado.Next;
end;
end;
现在问题是我用savedialog打算导出dbgrideh内容时,提示Cannot focus a disabled or invisible window错误。
下面是输出事件:
procedure Tfsxhtlb.RzToolButton2Click(Sender: TObject);
var ExpClass:TDBGridEhExportClass;
Ext:String;
begin
self.ActiveControl:=dbgrideh1;
SaveDialog1.FileName := 'FILE';
if (ActiveControl is tDBGridEh) then
if SaveDialog1.Execute then
begin
case SaveDialog1.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <>
UpperCase(Ext) then
SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
SaveDBGridEhToExportFile(ExpClass,TDBGridEh(ActiveControl),
SaveDialog1.FileName,true);
end;
end;
end;
[解决办法]
去掉 self.ActiveControl:=dbgrideh1;试试
[解决办法]
错误的意思就是
控件在不可见或者Endable=False时,不能设置它获取焦点,,,自己好好检查一下
比如像这样:
Edit1不可见或者Endable=False时,用Edit1.SetFocus就是错了
又比如有一个PageControl1,第1页有dbgrideh1,当前显示的不是第1页
若用self.ActiveControl:=dbgrideh1;也是错误的
应该在之前加上PageControl1.ActivePageIndex:=0;