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;
}
所以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;
}