Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing an ASP.NET Web Site page

Tags:

asp.net

I have spent 5 days researching how to print a DataList in a C# Visual Studio WEB SITE. I can print the DataList in a Web Project. It appears that since a Site does not have "namespace" as does a Project, Microsoft just didn't bother making a Web Site page printable. I have a rather large Web Site almost developed, and now it appears a major function of a Site is not possible. I need help! Thanks in advance.

P.S. It would seem that Microsoft would have mentioned this little problem in their literature comparing a Project to a Site, but they didn't.

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
 CodeBehind="PageLinkDetails.aspx.cs" Inherits="TestDataBase.PageLinkDetails" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div>
    <asp:Panel ID="pnl1" runat="server">
        <asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Caribbean %>"
            SelectCommand="SELECT * FROM [CaribbeanDirections] WHERE ([RecipeID] = @RecipeID)">
            <SelectParameters>
                <asp:QueryStringParameter Name="RecipeID" QueryStringField="RecipeID" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:DataList ID="DataList1" runat="server" DataKeyField="DirectionID" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
                <br />
                <br />
                INGREDIENTS:<br />
                <asp:Label ID="IngredientOneLabel" runat="server" Text='<%# Eval("IngredientOne") %>' />
                <br />
                <asp:Label ID="IngredientTwoLabel" runat="server" Text='<%# Eval("IngredientTwo") %>' />
                <br />
                <asp:Label ID="IngredientThreeLabel" runat="server" Text='<%# Eval("IngredientThree") %>' />
                <br />
                <asp:Label ID="IngredientFourLabel" runat="server" Text='<%# Eval("IngredientFour") %>' />
                <br />
                <asp:Label ID="IngredientFiveLabel" runat="server" Text='<%# Eval("IngredientFive") %>' />
                <br />
                <asp:Label ID="IngredientSixLabel" runat="server" Text='<%# Eval("IngredientSix") %>' />
                <br />
                <asp:Label ID="IngredientSevenLabel" runat="server" Text='<%# Eval("IngredientSeven") %>' />
                <br />
                <asp:Label ID="IngredientEightLabel" runat="server" Text='<%# Eval("IngredientEight") %>' />
                <br />
                <asp:Label ID="IngredientNineLabel" runat="server" Text='<%# Eval("IngredientNine") %>' />
                <br />
                <asp:Label ID="IngredientTenLabel" runat="server" Text='<%# Eval("IngredientTen") %>' />
                <br />
                Directions:<br />
                <asp:Label ID="DirectionOneLabel" runat="server" Text='<%# Eval("DirectionOne") %>' />
                <br />
                <asp:Label ID="DirectionTwoLabel" runat="server" Text='<%# Eval("DirectionTwo") %>' />
                <br />
                <asp:Label ID="DirectionThreeLabel" runat="server" Text='<%# Eval("DirectionThree") %>' />
                <br />
                <asp:Label ID="DirectionFourLabel" runat="server" Text='<%# Eval("DirectionFour") %>' />
                <br />
                <br />
            </ItemTemplate>
        </asp:DataList>
    </asp:Panel>
    <asp:Button ID="btnPrintCurrent" runat="server" Text="Print Current Page" OnClick="PrintCurrentPage" />
   </div>
   <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Bind("RecipeID",      "PageLinkDetails.aspx?RecipeId={0}") %>'
    Text='<%# Eval("Name") %>'>Rate This Recipe</asp:HyperLink>
  </asp:Content>



using System;
using System.Data;
using System.Data.SqlClient;
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 System.IO;
 using System.Text;
 using System.Web.SessionState;

namespace TestDataBase
{
public partial class PageLinkDetails : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        BindGrid();
    }

    private void BindGrid()
    {
        string strQuery = "select * " + "from CaribbeanDirections";
        DataTable dt = new DataTable();
        String strConnString = System.Configuration.ConfigurationManager
                    .ConnectionStrings["Caribbean"].ConnectionString;
        SqlConnection con = new SqlConnection(strConnString);
        SqlDataAdapter sda = new SqlDataAdapter();
        SqlCommand cmd = new SqlCommand(strQuery);
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;
        try
        {
            con.Open();
            sda.SelectCommand = cmd;
            sda.Fill(dt);
            //*DataList1.DataSource = dt;
            DataList1.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            con.Close();
            sda.Dispose();
            con.Dispose();
        }
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        /*Verifies that the control is rendered */
    }

    protected void OnPaging(object sender, PageEventArgs e)
    {

        DataList1.DataBind();
    }

    protected void PrintCurrentPage(object sender, EventArgs e)
    {

        DataList1.DataBind();
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        DataList1.RenderControl(hw);
        string gridHTML = sw.ToString().Replace("\"", "'")
            .Replace(System.Environment.NewLine, "");
        StringBuilder sb = new StringBuilder();
        sb.Append("<script type = 'text/javascript'>");
        sb.Append("window.onload = new function(){");
        sb.Append("var printWin = window.open('', '', 'left=0");
        sb.Append(",top=0,width=1000,height=600,status=0');");
        sb.Append("printWin.document.write(\"");
        sb.Append(gridHTML);
        sb.Append("\");");
        sb.Append("printWin.document.close();");
        sb.Append("printWin.focus();");
        sb.Append("printWin.print();");
        sb.Append("printWin.close();};");
        sb.Append("</script>");
        ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());

        DataList1.DataBind();
    }

    protected void btnPrint_Click(object sender, EventArgs e)
    {
        Session["ctrl"] = pnl1;

    }
}
}
like image 505
user1830924 Avatar asked Oct 20 '25 13:10

user1830924


1 Answers

If you want to print only a Datalist from a webpage. You can create a Div Name around the datalist and use the below code

<script language="javascript">
    function printDiv(divName) {
        var printContents = document.getElementById(divName).innerHTML;
        var originalContents = document.body.innerHTML;

        document.body.innerHTML = printContents;

        window.print();

        document.body.innerHTML = originalContents;
    }
</script>

Give a div name around the Datalist like this.

<div id="PrintDiv">
       <asp:DataList ID="DataList1" runat="server">     </asp:DataList>
</div>

Finally Create a print button.

<input type="button" onclick="printDiv('PrintDiv')" value="Print only Datalist!" />

EDIT

Your exact code worked for me. I created a ASP.NET website (Not Project). I copied your entire code and pasted into a new page and it worked.

The only thing I changed is the following.

I changed CodeBehind="PageLinkDetails.aspx.cs" to CodeFile="PageLinkDetails.aspx.cs"

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
 CodeFile="PageLinkDetails.aspx.cs" Inherits="TestDataBase.PageLinkDetails" %>

EDIT

Here is my Complete Code.

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
 CodeFile="PageLinkDetails.aspx.cs" Inherits="TestDataBase.PageLinkDetails" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
    <asp:Panel ID="pnl1" runat="server">
        <asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Database %>"

            SelectCommand="SELECT first AS Name, uid AS Id FROM users WHERE (uid IN (250, 251, 253, 252, 254))">
        </asp:SqlDataSource>
        <asp:DataList ID="DataList1" runat="server" DataKeyField="Id" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
                <br />
                <br />
                INGREDIENTS:<br />
                <asp:Label ID="IngredientOneLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientTwoLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientThreeLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientFourLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientFiveLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientSixLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientSevenLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientEightLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientNineLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="IngredientTenLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                Directions:<br />
                <asp:Label ID="DirectionOneLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="DirectionTwoLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="DirectionThreeLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <asp:Label ID="DirectionFourLabel" runat="server" Text='<%# Eval("Id") %>' />
                <br />
                <br />
            </ItemTemplate>
        </asp:DataList>
    </asp:Panel>
    <asp:Button ID="btnPrintCurrent" runat="server" Text="Print Current Page" OnClick="PrintCurrentPage" />
   </div>
   <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Bind("Id",      "PageLinkDetails.aspx?RecipeId={0}") %>'
    Text='<%# Eval("Name") %>'>Rate This Recipe</asp:HyperLink>
  </asp:Content>

This is code for aspx.cs

using System;
using System.Data;
using System.Data.SqlClient;
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 System.IO;
using System.Text;
using System.Web.SessionState;

namespace TestDataBase
{
    public partial class PageLinkDetails : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            BindGrid();
        }

        private void BindGrid()
        {
            string strQuery = "SELECT first AS Name, uid AS Id FROM users WHERE (uid IN (250, 251, 253, 252, 254))";
            DataTable dt = new DataTable();
            String strConnString = System.Configuration.ConfigurationManager
                        .ConnectionStrings["Database"].ConnectionString;
            SqlConnection con = new SqlConnection(strConnString);
            SqlDataAdapter sda = new SqlDataAdapter();
            SqlCommand cmd = new SqlCommand(strQuery);
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;
            try
            {
                con.Open();
                sda.SelectCommand = cmd;
                sda.Fill(dt);
                //*DataList1.DataSource = dt;
                DataList1.DataBind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
                sda.Dispose();
                con.Dispose();
            }
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            /*Verifies that the control is rendered */
        }

        protected void OnPaging(object sender, PageEventArgs e)
        {

            DataList1.DataBind();
        }

        protected void PrintCurrentPage(object sender, EventArgs e)
        {

            DataList1.DataBind();
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            DataList1.RenderControl(hw);
            string gridHTML = sw.ToString().Replace("\"", "'")
                .Replace(System.Environment.NewLine, "");
            StringBuilder sb = new StringBuilder();
            sb.Append("<script type = 'text/javascript'>");
            sb.Append("window.onload = new function(){");
            sb.Append("var printWin = window.open('', '', 'left=0");
            sb.Append(",top=0,width=1000,height=600,status=0');");
            sb.Append("printWin.document.write(\"");
            sb.Append(gridHTML);
            sb.Append("\");");
            sb.Append("printWin.document.close();");
            sb.Append("printWin.focus();");
            sb.Append("printWin.print();");
            sb.Append("printWin.close();};");
            sb.Append("</script>");
            ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());

            DataList1.DataBind();
        }

        protected void btnPrint_Click(object sender, EventArgs e)
        {
            Session["ctrl"] = pnl1;

        }
    }
}
like image 137
Cherian M Paul Avatar answered Oct 23 '25 08:10

Cherian M Paul