Hi, I'm having issues displaying the photos in a gridview when exporting it to Excel. I have downloaded and followed this demo:
https://www.aspsnippets.com/Articles/Export-GridView-with-Images-to-Word-Excel-and-PDF-Formats-in-ASP.Net.aspx
The demo works fine on my computer but when I copied it over to my project, the photos aren't displayed in Excel at all, though they're shown on the gridview.
Here's my code:
<asp:GridView ID="gvResult" EnableViewState="true" RowStyle-Wrap="false" EmptyDataRowStyle-ForeColor="Red" EmptyDataRowStyle-BorderStyle="None" EmptyDataRowStyle-BorderColor="White" HeaderStyle-HorizontalAlign="Center" AutoGenerateColumns="false" CssClass="grid responsiveTable1" OnRowCommand="gvResult_RowCommand" runat="server" Width="900px" DataKeyNames="ResultId" Style="margin-left: 0">
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Username" SortExpression="Username" Visible="False">
<ItemTemplate>
<asp:Label ID="lblUsername" runat="server" Text='<%# Bind("Username") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="HRMS" SortExpression="HRMS">
<ItemTemplate>
<asp:Label ID="lblHRMS" runat="server" Text='<%# Bind("HRMS") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hub" SortExpression="Hub">
<ItemTemplate>
<asp:Label ID="lblHub" runat="server" Text='<%# Bind("Hub") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="false" InsertVisible="False" SortExpression="ResultId">
<ItemTemplate>
<asp:Label ID="lblResultId" runat="server" EnableViewState="true" Text='<%# Eval("ResultId") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="QuizId" Visible="false" SortExpression="QuizId">
<ItemTemplate>
<asp:Label ID="lblQuizId" runat="server" Text='<%# Bind("QuizId") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="QuizName" HeaderText="Quiz Name" SortExpression="QuizName" />
<asp:BoundField DataField="Mark" HeaderStyle-CssClass="hidden-xs" ItemStyle-CssClass="hidden-xs" HeaderText="Score" SortExpression="Mark" />
<asp:BoundField DataField="Result" Visible="false" HeaderText="Result" SortExpression="Result" />
<asp:BoundField DataField="TimeSubmitted" HeaderText="Time Submitted" HeaderStyle-CssClass="hidden-xs" ItemStyle-CssClass="hidden-xs" SortExpression="TimeSubmitted" />
<asp:BoundField DataField = "SignatureFileName" Visible="false" HeaderText = "Image Name" />
<asp:TemplateField ItemStyle-Height = "35" ItemStyle-Width = "100" HeaderText = "Signature">
<ItemTemplate>
<asp:Image ID="Image1" Width="100px" Height="35px" runat="server" ImageUrl = '<%# Eval("ResultId", GetUrl("ImageSignature.aspx?SignatureId={0}"))%>' />
</ItemTemplate>
</asp:TemplateField>
<%--<asp:ImageField AlternateText="No signature found." DataImageUrlField="ResultId" DataImageUrlFormatString="ImageSignature.aspx?SignatureId={0}"
ControlStyle-Width="50%" ControlStyle-Height="50%" ControlStyle-CssClass="text-center" HeaderText="Signature" />--%>
<asp:CommandField ShowSelectButton="True" SelectText="View Details" />
</Columns>
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:GridView>
Code behind:
protected void btnExcel_Click(object sender, EventArgs e)
{
if (gvResult.Rows.Count > 0)
{
btnExcel.Visible = true;
btnExcel.BackColor = System.Drawing.ColorTranslator.FromHtml("#5bc0de");
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=QuizResults.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
for (int i = 0; i < gvResult.Rows.Count; i++)
{
GridViewRow row = gvResult.Rows[i];
//Apply text style to each Row
row.Attributes.Add("class", "textmode");
}
gvResult.RenderControl(hw);
//style to format numbers to string
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
}
protected string GetUrl(string page)
{
string[] splits = Request.Url.AbsoluteUri.Split('/');
if (splits.Length >= 2)
{
string url = splits[0] + "//";
for (int i = 2; i < splits.Length - 1; i++)
{
url += splits[i];
url += "/";
}
return url + page;
}
return page;
}
Could anyone please help take a look to see what I need to fix? Thanks!