如何解决将网格的ASPTemplateField列数据导出到EXCEL PDF和CSV时,数据未显示
实际上我是gridview,因为我使用了一个TemplateField列,它在浏览器中显示数据 当将该网格导出到EXCEl,PDF和CSV时,该列的数据不显示,如何解决此问题。谢谢
在.asp代码中
<asp:GridView ID="gvmacroManagement" runat="server" Font-Size="Small" Height="40px" Width="100%" AutoGenerateColumns="false"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" OnPageIndexChanging="gvmacroManagement_PageIndexChanging"
BorderWidth="1px" CellPadding="3" AllowPaging="true" PageSize="10" CssClass="mGrid">
<Columns>
<asp:BoundField DataField="Id" HeaderText="ID" ItemStyle-Width="50" Visible="false" />
<asp:BoundField DataField="FirstName" HeaderText="Physician Name" ItemStyle-Width="50" />
<asp:BoundField DataField="Hospital" HeaderText="Hospital Name" ItemStyle-Width="50" />
<asp:BoundField DataField="MacroTitle" HeaderText="Macro Title" ItemStyle-Width="50" />
<%--<asp:BoundField DataField="MacroDescription" HeaderText="Macro Description" ItemStyle-Width="50" />--%>
<asp:TemplateField ItemStyle-Width="50" HeaderText="Macro Description">
<ItemTemplate>
<asp:Label ID="MacroDescription" runat="server"
Text='<%# Limit(Eval("MacroDescription"),30) %>'
ToolTip='<%# Eval("MacroDescription") %>'
>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="PId" HeaderText="PId" ItemStyle-Width="50" Visible="false" />
<asp:BoundField DataField="CreatedBy" HeaderText="CreatedBy" ItemStyle-Width="50" />
<%--<asp:BoundField DataField="PId" HeaderText="PId" ItemStyle-Width="50" Visible="false" />--%>
<asp:BoundField DataField="HId" HeaderText="HId" ItemStyle-Width="50" Visible="false" />
<asp:TemplateField HeaderText="Action" ItemStyle-Width="90">
<ItemTemplate>
<asp:ImageButton ID="imgMacroEdit" ImageUrl="images/edit.png" runat="server" Width="15" Height="15"
CommandArgument='<%# Eval("Id")+ "," + Eval("FirstName")+ "," + Eval("Hospital")+ "," + Eval("MacroTitle")
+ "," + Eval("macrodescription") +","+Eval("PId")+","+Eval("HId")%>'
OnClick="imgMacroEdit_Click" OnClientClick="return confirm('Are you sure you want to edit this Macro?');" ToolTip="Edit" />
<asp:ImageButton ID="imgMacroDelete" ImageUrl="images/Delete.png" runat="server" Width="15" Height="15"
OnClick="imgMacroDelete_Click" OnClientClick="return confirm('Are you sure you want to delete this Macro?');"
CommandArgument='<%# Eval("Id")%>' ToolTip="Delete" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
HERE是.CS文件代码
protected string Limit(object desc,int maxLength)
{
var MacroDescription = (string)desc;
if (string.IsNullOrEmpty(MacroDescription)) { return MacroDescription; }
return MacroDescription.Length <= maxLength ?
MacroDescription : MacroDescription.Substring(0,maxLength) + " ... ";
}
解决方法
带有
GridView
的 TemplateField
可以轻松导出并正确显示。
当带有TemplateField列的GridView包含诸如HyperLink
,TextBox
,Button
,LinkButton
,RadioButton
或CheckBox
控件的控件时,会发生问题。发生这种情况时,我们需要转换以删除这些控件,并用Label或Literal控件替换它们。
这是GetCellText的功能。
private static string GetCellText(DataControlFieldCell cell)
{
if (cell.Controls.Count == 0) {
return CsvFormatted(cell.Text);
} else {
foreach (object current_loopVariable in cell.Controls) {
current = current_loopVariable;
if (current is Label) {
return CsvFormatted((current as Label).Text);
} else if (current is TextBox) {
return CsvFormatted((current as TextBox).Text);
} else if (current is LinkButton) {
return CsvFormatted((current as LinkButton).Text);
} else if (current is ImageButton) {
return CsvFormatted((current as ImageButton).AlternateText);
} else if (current is HyperLink) {
return CsvFormatted((current as HyperLink).Text);
} else if (current is DropDownList) {
return CsvFormatted((current as DropDownList).SelectedItem.Text);
} else if (current is CheckBox) {
return CsvFormatted((current as CheckBox).Checked ? "True" : "False");
}
}
}
return "";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。