千金不卖

探讨 RS BO C# Oracle Sql Server DB2 DataWareHouse Arcplan Cognos MB MQ 信息资源标准 主数据 元数据 数据质量 业务建模 ----姚刚

博客园 首页 新随笔 联系 订阅 管理
 NetAdvantage控件中提供了一个很有用的组件,那就是UltraGridExcelExporter,是与UltraGrid绑定使用的组件.
       使用它只需要以下几个步骤就可以实现Grid中的数据导出:
1.     拖放一个UltraGridExcelExporter到Form中
因为是组件,所以出现在IDE的Form设计器下方
2.     Form中有Grid,栏位如下
3.     编写Button事件触发Export动作
注意: 因为Grid中有按钮列, 而导出时不需要带按钮列, 故需要先将其隐藏, 到处成功之后再将其显示(可以写在EndExport事件中)
4.     另外, 如果要加入进度条, 可以写在如下几个事件中
BeginExport – 开始导出时触发该事件, 可以在这里面增加进度条的初始化动作
RowExported – 导出完Grid中的一行时触发, 可以在这里面将进度条的Value加1
EndExport – 导出完毕时触发, 可以在这里面提示数据已经到处完毕




但这样带来一个问题:就是在导出的时候,如果遇到错误,则跑到Exception的catch段中,而此时Grid还未执行EndUpdate动作,
所以UI上是不会重画的,类似于之前的SSDBGrid中的Redraw=false,从而给人感觉很不友好。
现修改为如下方法:
导出的时候还是依旧捕获错误,但不去设置Grid的显示情况,而是通过ExcelExporter的事件去处理Grid的“快照”
try
{
this.Cursor = Cursors.WaitCursor;
this.uGridExcelExporter.Export(this.uGridJournalRuleList, this.saveFileDialogExcel.FileName);
System.Diagnostics.Process.Start(this.saveFileDialogExcel.FileName);
}
catch (System.IO.IOException)
{
MessageHelper.ShowInformation(this, ACTIONS.FileAction.FileAlreadyOpened);
}
catch (System.UnauthorizedAccessException)
{
MessageHelper.ShowInformation(this, ACTIONS.FileAction.NoAccess);
}
catch (Exception ex)
{
MessageHelper.ShowAlert(this, ACTIONS.CommonAction.UnknownError, ex);
}
finally
{
this.Cursor = Cursors.Default;
}
在这个事件中,eventargument提供了对Layout的访问,如下,可以任意更改哪些列显示与否的动作,且这边的更改不会影响到Grid的呈现,跟Grid断开关联了,看起来好像是获得了一份Grid的快照

private void uGridExcelExporter_BeginExport(object sender, UltraWinGrid.ExcelExport.BeginExportEventArgs e)
{
e.Layout.Bands[0].Columns["Edit"].Hidden = true;
}

posted on 2008-05-05 19:11  doc  阅读(1732)  评论(0编辑  收藏  举报