Showing posts with label Asp.Net. Show all posts
Showing posts with label Asp.Net. Show all posts

Sunday, June 3, 2012

GridView to Pdf using iTextSharp

First of all you need to convert contents of gridview to Pdf. There is an third party dll:- iTextSharp dll which will help us to convert gridview contents to pdf.

1. Just Download iTextsharp lib. from http://sourceforge.net/projects/itextsharp/

2. Add 1 form in your project named as "pdf" then copy following design & Code behind code &  replace it in your code.

Currently we have taken 1 gridview & button on form.
You can bind your data to gridview as you required. I have just created dataset manually & assign it to gridview

Design Form
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="pdf.aspx.cs" Inherits="pdf" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
   <form id="form1" runat="server">
  <div>
      <asp:GridView ID="GridView1" runat="server">
      </asp:GridView>
      <asp:Button ID="btnExportToPdf" runat="server" OnClick="btnExportToPdf_Click"
          Text="Pdf" /></div>
</form>
</body>
</html>

Code Behind File
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;
using System.Collections.Generic;

public partial class pdf : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridView1.DataSource = GetData();
            GridView1.DataBind();
        }
    }

    public DataSet GetData()
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable("Product");
        DataRow dr;
        dt.Columns.Add(new DataColumn("Price", typeof(Int32)));
        dt.Columns.Add(new DataColumn("DisCount", typeof(Int32)));
        dt.Columns.Add(new DataColumn("SellPrice", typeof(Int32)));
        for (int i = 1; i <= 10; i++)
        {
            dr = dt.NewRow();
            dr[0] = i;
            dr[1] = i * 2;
            dr[2] = 1 * 3;
            dt.Rows.Add(dr);
        }
        ds.Tables.Add(dt);
        Session["dt"] = dt;
        return ds;
    }

    protected void btnExportToPdf_Click(object sender, EventArgs e)
    {
        MyPage tmpPage = new MyPage();
        HtmlForm form = new HtmlForm();

        form.Controls.Add(GridView1);

        tmpPage.Controls.Add(form);
        StringWriter sw = new StringWriter();
        HtmlTextWriter htmlWriter = new HtmlTextWriter(sw);
        form.Controls[0].RenderControl(htmlWriter);
        string htmlContent = sw.ToString();
        Document document = new Document();
        // step 2:
        // we create a writer that listens to the document
        // and directs a PDF-stream to a file
        PdfWriter.GetInstance(document, new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+ "\\Sample.pdf", FileMode.Create));
       

        // step 3: we open the document
        document.Open();

        // step 4: we add a paragraph to the document

        //document.Add(new Paragraph(htmlContent.ToString()));

        System.Xml.XmlTextReader _xmlr = new System.Xml.XmlTextReader(new StringReader(htmlContent));

        //HtmlParser.Parse(document, _xmlr);
        using (TextReader sReader = new StringReader(sw.ToString()))
        {
            List<IElement> list = HTMLWorker.ParseToList(sReader, new StyleSheet());
            foreach (IElement elm in list)
            {
                document.Add(elm);
            }
        }

        // step 5: we close the document
        document.Close();

        //  Response.Write(document);
        string Path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Sample.pdf";
        ShowPdf(Path);
    }

    private void ShowPdf(string strS)
    {
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + strS);
        Response.TransmitFile(strS);
        Response.End();
        Response.Flush();
        Response.Clear();
    }

}

 We have created 1 more class file
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for MyPage
/// </summary>
public class MyPage : Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {
        GridView grid = control as GridView;
        if (grid != null && grid.ID == "GridView1")
            return;
        else
            base.VerifyRenderingInServerForm(control);

    }
}

Above code snippet will help you to generate pdf.

 Happy Coding !!

Thursday, March 10, 2011

Send email through gmail


Following snippet is for sending mail through gmail smtp server.

create 4 textboxes for to, from,subject & message. Dot Net has provided us a class System.Net.Mail.SmtpClient. with the help of this class we can send the email.

If your company have an email server you require to change following:
Gmails SMTP port is 587.
Gmails Host address is smtp.gmail.com
Give your username and password("username@gmail.com", "pwd") to make following code workable.


            System.Net.Mail.MailMessage mailmessage=new System.Net.Mail.MailMessage();
            mailmessage.Body = txtBody.Text;
            mailmessage.From = new System.Net.Mail.MailAddress( txtFrom.Text);
            mailmessage.To.Add(txtTo.Text);
            mailmessage.Subject = txtSubject.Text;
            mailmessage.IsBodyHtml = true;
            System.Net.Mail.SmtpClient smt = new System.Net.Mail.SmtpClient();
            smt.UseDefaultCredentials = false;

            smt.Credentials = new System.Net.NetworkCredential("username@gmail.com", "pwd");
            smt.Host = "smtp.gmail.com";
            smt.Port = 587;
            smt.EnableSsl = true;

            smt.Send(mailmessage);

Above code snippet will help us to send an email.

Happy Coding !! 

Wednesday, February 23, 2011

Font size changing while loading alert window through Javascript in response.write()

Problem:
I am using javscript to open a alert window when a button is clicked.
Here is the code in cs file :
Response.Write("<script>alert('hai')</script>");

Interesting thing is with the click of button, the font size changed (increased) in the original asp.net page; refreshing the screen brings back the original font size.

Solution
The above problem is caused because the script is coming outside the html in the rendered html page.

.Net Frame work has provide a class to manage client side scripts

Try like this.
// Define the name and type of the client scripts on the page.
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(cstype, "name", "<script>alert('hai')</script>");
This code will help us to resolve our font size increase issue.


Happy Coding!!

Disable back using javascript in asp.net

After login we come to home page & after click on back button it should not move to login page
so we use following script to restrict it.

when we traverse through webpages its history is maintained. Don't forget to call setTimeout method
It works on Firefox , IE & Chrome  also
 <script type = "text/javascript" >
function disableback()
{
window.history.forward();
}
setTimeout("disableback()", 0);
</script>

Call above method on Body unload method on login page so when u move from login to home page after click on home's back button, we will be on same page that is on home page.
<body onunload="disableback()">
 now your back button problem will be solved......


Happy Coding!!

Tuesday, February 22, 2011

Focus particular textbox in page bydefault (like google) & on enter key press hit button from page(like google search button)

This are very easy things to do,

when we open any page and we want particular textbox contains cursor & after pressing enter button particular button gets clicked then do the following things.

In asp.net page contains a form tag, It contains defaultbutton & defaultfocus attributes set it as per your requirement

defaultbutton:= give your buttons name which u want to clicked
defaultfocus:= give control name for which you want focus after page load
<form id="form1" runat="server" defaultbutton="Button1" defaultfocus="TextBox1">
 Here  TextBox1 contains cursor & after press enter Button1's click event gets called.

Happy Coding !!

Encrypt & Decrypt Connection string in web.config


first import System.web.configuration namespace then add following code for encryption
for example on some button i have written following code for encryption
        string path=@"\Projectname";
        Configuration config = WebConfigurationManager.OpenWebConfiguration(path);
        ConfigurationSection appsetting = config.GetSection("connectionStrings");
        appsetting.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
        config.Save();

ProtectSection Method in  SectionInformation encrypts the connection string

Now lets see for how to decrypt, SectionInformation contains method UnprotectSection() for decryption
code as below
        string path = @"\Projectname";
        Configuration config = WebConfigurationManager.OpenWebConfiguration(path);
        ConfigurationSection appsetting = config.GetSection("connectionStrings");
        appsetting.SectionInformation.UnprotectSection();
        config.Save();

This Snippet will help to Encrpt & Decrypt  connection String

Happy Coding!!

Wednesday, February 9, 2011

Freeze the columns in Gridview

Sometimes you need a way in which you don't want end user to edit some columns of gridview. There is no direct way for this. But you can achieve this with the help of CSS functionality.

STEP 1: Add the Following CSS class to the .aspx file
<style type="CSS/Text">
td.freezecolumn{
text-align: left;
border-width:0;
position:relative;
cursor: default;
left:inherit;
}
</style>


STEP 2: Set the CSSClass property of the cells in the GridView RowDatabound event as shown below.

protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[1].CssClass = "freezecolumn";
}
This way you can freeze the column or you can say non-editable column in gridview.

Happy Coding!!

Tuesday, February 1, 2011

append values into querystring in asp.net

If you try to add "&" directly into string , it doesn't work
Ex: WebPage.aspx?Var1=DVal1&Var2=DVal2

if u want to create above querystring & u try to write statement as below
string url="WebPage.aspx?Var1=" + DVal1 + "&Var2=" + DVal2;
DVal1 & DVal2 are strings. It will work for simple cases but it won't work for few cases.
If DVal1 & DVal2 contains space in contents (DVal1="my value") It will show you
WebPage.aspx?Var1=my.
to make proper querystring you have to use a Server.UrlEncode

It replaces space with %20 and & with %26
string url="WebPage.aspx?Var1=" + Server.UrlEncode(DVal1) + "&Var2=" + Server.UrlEncode(DVal2);

Use of Server.UrlEncode avoids error and help us to append data to querystring.

Happy Coding!! 

Saturday, January 29, 2011

Maintain Scroll position in div Asp.Net

This javascript is useful for maintaining scroll position in Panel or div tag...
Write following javascript function inside js file and add script reference to this file on page Or write following javascript on the same page inside script tag, it is called as inline javascript.

Following code in Script Tag....
window.onload = function(){
var strCook = document.cookie;
if(strCook.indexOf("!~")!=0){
var intS = strCook.indexOf("!~");
var intE = strCook.indexOf("~!");
var strPos = strCook.substring(intS+2,intE);
document.getElementById("divTest").scrollTop = strPos;
}
}
function SetDivPosition(){
var intY = document.getElementById("divTest").scrollTop;
document.title = intY;
document.cookie = "yPos=!~" + intY + "~!";
}


Following code in body

You need to call SetDivPosition() javascript function on div's onscroll event
< div id="divTest" width:150px;height:200px;overflow:auto" onscroll="SetDivPosition()">
--Gridview (or more data)
</div>
This way you can maintain the scroll position.

Happy Coding!!

Tuesday, January 11, 2011

checkbox in listbox asp.net

Sometimes we require a list of checkbox. How can we achieve this in asp.net
1. Add div on your asp.net page. Set some height and width to div so it will be fixed in height and width and will look appropriately on the web page.
Set overflow:auto so if your list is increasing it will give you scrollbar.
< div style="BORDER: thin solid; OVERFLOW: auto; WIDTH: 100px; HEIGHT: 100px">
< /div>
2. Insert CheckBoxList control inside div.
< div style="BORDER: thin solid; OVERFLOW: auto; WIDTH: 100px; HEIGHT: 100px">
< asp:checkboxlist id="CheckBoxList1" runat="server">
</div> 
This way you can get a checkboxlist effect.

Happy Coding!!