大家都知道ASP.NET中GridView导出Excel的方法。在SharePoint中SPGridView是继承GridView的一个扩展控件,那么ASP.NET中的导出方法在SharePoint中也应适用。是可以用,但是有一个问题,就是第一次点击按钮导出成功后,你再次点击按钮的话,按钮就不在有用了。于是Google了一下,找到了这篇Export GridView to Excel in web part帖子解决了问题,就是在Page_Load中注册两行Javascript脚本。
|
1
2
3
4
5
6
7
|
protected void Page_Load(object sender, EventArgs e){ this.CreateToolBar(); string script = "_spOriginalFormAction = document.forms[0].action;\n_spSuppressFormOnSubmitWrapper = true;"; this.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", script, true);} |
创建ToolBar方法:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
private void CreateToolBar(){ ToolBar toolBar = (ToolBar)Page.LoadControl("~/_controltemplates/ToolBar.ascx"); ToolBarButton btnExportToExcel = (ToolBarButton)Page.LoadControl("~/_controltemplates/ToolBarButton.ascx"); btnExportToExcel.ID = "btnExportToExcel"; btnExportToExcel.Text = "Export to Spreadsheet"; btnExportToExcel.ImageUrl = "/_layouts/images/icxls.gif"; btnExportToExcel.Click += new EventHandler(btnExportToExcel_Click); toolBar.Buttons.Controls.Add(btnExportToExcel); this.Toolbar.Controls.Clear(); this.Toolbar.Controls.Add(toolBar);} |
导出按钮事件:
|
1
2
3
4
|
void btnExportToExcel_Click(object sender, EventArgs e){ ExportToExcel("SearchResults", gvSearchResults);} |
下面是SharePoint中导出Excel的完整代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
protected void ExportToExcel(string fileName, GridView gv){ Response.Clear(); Response.Charset = "GB2312"; Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); Response.ContentType = "application/ms-excel"; using (TextWriter tw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(tw)) { Table table = new Table(); table.GridLines = gv.GridLines; if (gv.HeaderRow != null) { PrepareControlForExport(gv.HeaderRow); table.Rows.Add(gv.HeaderRow); } foreach (GridViewRow row in gv.Rows) { PrepareControlForExport(row); table.Rows.Add(row); } if (gv.FooterRow != null) { PrepareControlForExport(gv.FooterRow); table.Rows.Add(gv.FooterRow); } table.RenderControl(htw); Response.Write(tw.ToString()); Response.End(); } }}private void PrepareControlForExport(Control control){ for (int i = 0; i < control.Controls.Count; i++) { Control current = control.Controls[i]; if (current is LinkButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); } else if (current is ImageButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); } else if (current is HyperLink) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); } else if (current is DropDownList) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); } else if (current is CheckBox) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); } if (current.HasControls()) { PrepareControlForExport(current); } }} |
分类: MOSS