Hi sat,
Instead of ImageField use Image control within a TemplateField and write the below code.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#D6D6D6"
BorderColor="#D6D6D6" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name">
<ItemStyle HorizontalAlign="Center" CssClass="gvpad" />
<HeaderStyle CssClass="gvpad" />
</asp:BoundField>
<%--<asp:ImageField DataImageUrlField="PersonId" ReadOnly="true" HeaderStyle-ForeColor="Black"
DataImageUrlFormatString="~/Image.aspx?PersonId={0}" HeaderText="Image">
<ControlStyle Height="100px"></ControlStyle>
<ItemStyle HorizontalAlign="Center" CssClass="gvpad" />
<HeaderStyle CssClass="gvpad" />
</asp:ImageField>--%>
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("PersonId", GetUrl("Image.aspx?PersonId={0}"))%>' />
</ItemTemplate>
<ControlStyle Height="100px"></ControlStyle>
<ItemStyle HorizontalAlign="Center" CssClass="gvpad" />
<HeaderStyle CssClass="gvpad" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<br />
<asp:Button ID="Button1" runat="server" BackColor="#0066FF" Font-Bold="True" ForeColor="#FFFFCC"
Text="Send Report" OnClick="Button1_Click" BorderStyle="None" Height="30px" />
Namespaces
C#
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net.Mail;
using System.Threading;
Code
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
string query = "SELECT id PersonId,Name FROM tblFiles WHERE ContentType = 'image/jpeg'";
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string addressTo = Label1.Text;
string addressFrom = "mail@abc.online";
string subject = "Report Alert #" + Label2.Text + " !";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
GridView1.RenderControl(hw);
string body = "Dear Sir" + "<br />" + "<br />"
+ "Please find below the Picture report." + "<br />" + "<br />"
+ sw.ToString() + "<br />" + "<br />"
+ "Jai Hind";
Thread email = new Thread(delegate()
{
SendEmail(addressTo, addressFrom, subject, body);
});
email.IsBackground = true;
email.Start();
}
}
Response.Redirect("Home");
}
private void SendEmail(string addressTo, string addressFrom, string subject, string body)
{
using (MailMessage mm = new MailMessage(addressFrom, addressTo))
{
mm.Subject = subject;
mm.Body = body;
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "abc.online";
smtp.EnableSsl = false;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "mail@abc.online";
NetworkCred.Password = "pass&%%^HJ";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 25;
smtp.Send(mm);
}
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Verifies that the control is rendered */
}
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;
}
Image.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
string id = Request.QueryString["PersonId"];
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
string sql = "SELECT Data,ContentType FROM tblFiles WHERE Id =" + id;
using (SqlDataAdapter sda = new SqlDataAdapter(sql, con))
{
DataTable dt = new DataTable();
sda.Fill(dt);
byte[] bytes = (byte[])dt.Rows[0]["Data"];
Response.ContentType = dt.Rows[0]["ContentType"].ToString();
Response.BinaryWrite(bytes);
Response.End();
}
}
}