解决SharePoint中GridView导出Excel按钮的问题

protected void Page_Load( object sender, EventArgs e)

02 {
03      CreateToolBar();
04  
05      if (!IsPostBack)
06      {
07          string script = "_spOriginalFormAction = document.forms[0].action;/n_spSuppressFormOnSubmitWrapper = true;" ;
08          this .ClientScript.RegisterClientScriptBlock( this .GetType(), "script" , script, true );
09      }
10 }

创建ToolBar方法:

01 private void CreateToolBar()
02 {
03      ToolBar tb = (ToolBar)Page.LoadControl( "~/_controltemplates/ToolBar.ascx" );
04  
05      ToolBarButton btnExportToExcel = (ToolBarButton)Page.LoadControl( "~/_controltemplates/ToolBarButton.ascx" );
06      btnExportToExcel.ID = "btnExportToExcel" ;
07      btnExportToExcel.Text = "Export to Spreadsheet" ;
08      btnExportToExcel.ImageUrl = "/_layouts/images/icxls.gif" ;
09      btnExportToExcel.Click += new EventHandler(btnExportToExcel_Click);
10  
11      tb.Buttons.Controls.Add(btnExportToExcel);
12      this .pnlToolbar.Controls.Clear();
13      this .pnlToolbar.Controls.Add(tb);
14 }

导出按钮事件:

1 void btnExportToExcel_Click( object sender, EventArgs e)
2 {
3      ExportToExcel( "SearchResults" , gvSearchResults);
4 }

下面是SharePoint中导出Excel的完整代码:

01 protected void ExportToExcel( string fileName, GridView gv)
02 {
03      Response.Clear();
04      Response.Charset = "GB2312" ;
05      Response.AddHeader( "content-disposition" , string .Format( "attachment; filename={0}" , fileName));
06      Response.ContentType = "application/ms-excel" ;
07  
08      using (TextWriter tw = new StringWriter())
09      {
10          using (HtmlTextWriter htw = new HtmlTextWriter(tw))
11          {
12              Table table = new Table();
13              table.GridLines = gv.GridLines;
14  
15              if (gv.HeaderRow != null )
16              {
17                  PrepareControlForExport(gv.HeaderRow);
18                  table.Rows.Add(gv.HeaderRow);
19              }
20  
21              foreach (GridViewRow row in gv.Rows)
22              {
23                  PrepareControlForExport(row);
24                  table.Rows.Add(row);
25              }
26  
27              if (gv.FooterRow != null )
28              {
29                  PrepareControlForExport(gv.FooterRow);
30                  table.Rows.Add(gv.FooterRow);
31              }
32  
33              table.RenderControl(htw);
34  
35              Response.Write(tw.ToString());
36              Response.End();
37          }
38      }
39 }
40  
41 private void PrepareControlForExport(Control control)
42 {
43      for ( int i = 0; i < control.Controls.Count; i++)
44      {
45          Control current = control.Controls[i];
46  
47          if (current is LinkButton)
48          {
49              control.Controls.Remove(current);
50              control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
51          }
52          else if (current is ImageButton)
53          {
54              control.Controls.Remove(current);
55              control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
56          }
57          else if (current is HyperLink)
58          {
59              control.Controls.Remove(current);
60              control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
61          }
62          else if (current is DropDownList)
63          {
64              control.Controls.Remove(current);
65              control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
66          }
67          else if (current is CheckBox)
68          {
69              control.Controls.Remove(current);
70              control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False" ));
71          }
72  
73          if (current.HasControls())
74          {
75              PrepareControlForExport(current);
76          }
77      }
78 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值