首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

dbgrideh内容导出异常

2013-04-22 
dbgrideh内容导出错误lbview(fsxhtlb.DBGridEh1,fsxhtlb.ADOQuery2)//调用dbgrideh1字段自动添加过程过程

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;

热点排行