2

C# Visual Studio WEB SITE で DataList を印刷する方法の調査に 5 日間を費やしました。Web プロジェクトで DataList を印刷できます。サイトにはプロジェクトのような「名前空間」がないため、Microsoft は Web サイトのページを印刷可能にすることを気にしなかったようです。私はかなり大規模な Web サイトをほぼ開発していますが、現在、サイトの主要な機能が使用できないようです。私は助けが必要です!前もって感謝します。

PS マイクロソフトは、プロジェクトとサイトを比較する文献でこの小さな問題について言及していたようですが、そうではありませんでした。

<%@ 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;

    }
}
}
4

2 に答える 2

4

Web ページからデータリストのみを印刷する場合。データリストの周りに Div 名を作成し、以下のコードを使用できます

<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>

このように Datalist の周りに div 名を付けます。

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

最後に印刷ボタンを作成します。

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

編集

あなたの正確なコードは私のために働いた。ASP.NET Web サイトを作成しました (プロジェクトではありません)。コード全体をコピーして新しいページに貼り付けたところ、うまくいきました。

私が変更したのは次のことだけです。

に変更CodeBehind="PageLinkDetails.aspx.cs"しましたCodeFile="PageLinkDetails.aspx.cs"

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

編集

これが私の完全なコードです。

<%@ 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>

これは 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;

        }
    }
}
于 2013-08-19T21:50:47.297 に答える
1

CTRLこれは非常に遅い回答かもしれませんが、私のようにこの投稿に来る可能性のある新しいユーザーには、 + P(PRINT COMMAND)を使用してページを簡単に印刷できることを知ってもらいたいと思います。いくつかの要素だけを出力するには、クラス名または ID を追加できます。以下のように見てください。

ページの印刷

ページを印刷するには、任意のブラウザで印刷コマンドを押すだけです。または、単に JS コマンドを使用します。

window.print();

これをイベント内に保持したり、ボタンなどの使用したいものに保持したりできます。

<input type="button" value="Print" id="print" onclick="print()" />

function print() {
  window.print();
}

一部のみ印刷

CSS3 が手元にあるので、印刷したい部分を簡単に切り取ることができます。次に例を示します。

@media print {
   /* properties for printed page */
}

ここで宣言するすべてのプロパティは、ハード コピー (印刷形式) のドキュメントに適用されます。フッターやその他の div を非表示にする場合は、次のように非表示に設定できます。

@media print {
  footer, header, non-printable-part {
    display: none;
  }
}

ここで、印刷コマンドを送信するか、ボタンをクリックすると。印刷可能な部分だけが表示されます。CSS3 Media Query を使用して簡単に作成できます。

于 2014-04-06T12:47:29.390 に答える