积极答复者
GridView 导出到Excel 遇到了问题

问题
-
问题1:以下是我导出到Excel表的代码,然而我把ContractNumber格式改为HyperLinkField后,就只能导出其他,而不能导出ContractNumber的内容了(见图1),该如何修改呢?
问题2:Excel表中有一些
能否在导出的时候就消除呢?
=======================前台===================
//导入Excel表,通过扫描GridView的网格,而非直接读取SQL数据库 protected void btnExport_Click(object sender, EventArgs e) { if (GridView_Search.Rows.Count == 0) return; Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = true; for (int i = 0; i < GridView_Search.Columns.Count; i++) { excel.Cells[1, i + 1] = GridView_Search.Columns[i].HeaderText; } for (int i = 0; i < GridView_Search.Rows.Count; i++) { for (int j = 0; j < GridView_Search.Columns.Count; j++) { excel.Cells[i + 2, j + 1] = GridView_Search.Rows[i].Cells[j].Text; } } }
=======================后台=========================
<asp:HyperLinkField HeaderText="合同编号" NavigateUrl="~/ContractTable/BrowserToContractManage.aspx" DataNavigateUrlFields="CID" DataNavigateUrlFormatString="~/ContractTable/BrowserToContractManage.aspx?CID={0}" DataTextField="Contractnumber" Target="_blank" SortExpression="ContractNumber" > <ControlStyle Font-Size="Small" Width="110px" /> <FooterStyle Font-Size="Small" Width="110px" Wrap="True" /> <HeaderStyle Font-Size="Small" Width="110px" Wrap="True" /> <ItemStyle Font-Size="Small" Width="110px" Wrap="True" /> </asp:HyperLinkField>
==========================图1========================
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。
- 已编辑 linjiangxian11 2014年12月3日 4:04
答案
-
您好,
要判斷 Count > 0 ,再check 是否為 HyperLink哦! 如下,
for (int i = 0; i < GridView_Search.Columns.Count; i++) { string hText = GridView_Search.Columns[i].HeaderText; } for (int i = 0; i < GridView_Search.Rows.Count; i++) { for (int j = 0; j < GridView_Search.Columns.Count; j++) { string cellValue = string.Empty; if (GridView_Search.Rows[i].Cells[j].Controls.Count > 0) { if (GridView_Search.Rows[i].Cells[j].Controls[0] is HyperLink) { cellValue = ((HyperLink)GridView_Search.Rows[i].Cells[j].Controls[0]).Text; } else { //maybe have other template field .... } } else { cellValue = GridView_Search.Rows[i].Cells[j].Text.Replace(" ", " "); } excel.Cells[i + 2, j + 1] = cellValue; } }
- 已标记为答案 linjiangxian11 2014年12月8日 8:47
全部回复
-
您好,
1.如果是 HyperLinkField 的話,取值要用
((HyperLink)GridView_Search.Rows[i].Cells[合同编号columnindex].Controls[0]).Text
2.您可以值接置換掉 ,或是用Template 放Label去取得 Label的Text值,
可參考:取DataGrid的Cell的Text值,DB中沒有值,但實際它的值是 -
还未来得及测试,不好意思,但看您"1"中的代码,是否还要加上判断语句呢,先判断它格式是否为HyperLink?因为我只有那一列是HyperLink。
具体我不知道该怎么写,如何循环呢?
问题2,也要加入判断吧?
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。
- 已编辑 linjiangxian11 2014年12月4日 1:33
-
你好,
如果你的页面中包含HyperLink,在你导出Excel时,需要获取控件的值。
你可以参考下面的链接:
http://forums.asp.net/t/1255489.aspx?Export+a+GridView+to+Excel+C+
-
问题1:我加了一个格式判断,但还是老样子。
问题2:我用了个笨办法,可以把 消除了。
还需要继续求教问题1 啊,谢谢各位
=========================代码=========================
for (int i = 0; i < GridView_Search.Columns.Count; i++) { excel.Cells[1, i + 1] = GridView_Search.Columns[i].HeaderText; } for (int i = 0; i < GridView_Search.Rows.Count; i++) { for (int j = 0; j < GridView_Search.Columns.Count; j++) { if (GridView_Search.Rows[i].Cells[j].GetType() == typeof(HyperLink)) { excel.Cells[i + 2, j + 1] = ((HyperLink)GridView_Search.Rows[i].Cells[j].Controls[0]).Text; } else { if (GridView_Search.Rows[i].Cells[j].Text == " ") {excel.Cells[i + 2, j + 1] ="";} else {excel.Cells[i + 2, j + 1] = GridView_Search.Rows[i].Cells[j].Text;} } } }
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。
- 已编辑 linjiangxian11 2014年12月5日 2:24
-
您好,
要判斷 Count > 0 ,再check 是否為 HyperLink哦! 如下,
for (int i = 0; i < GridView_Search.Columns.Count; i++) { string hText = GridView_Search.Columns[i].HeaderText; } for (int i = 0; i < GridView_Search.Rows.Count; i++) { for (int j = 0; j < GridView_Search.Columns.Count; j++) { string cellValue = string.Empty; if (GridView_Search.Rows[i].Cells[j].Controls.Count > 0) { if (GridView_Search.Rows[i].Cells[j].Controls[0] is HyperLink) { cellValue = ((HyperLink)GridView_Search.Rows[i].Cells[j].Controls[0]).Text; } else { //maybe have other template field .... } } else { cellValue = GridView_Search.Rows[i].Cells[j].Text.Replace(" ", " "); } excel.Cells[i + 2, j + 1] = cellValue; } }
- 已标记为答案 linjiangxian11 2014年12月8日 8:47