2

グリッドビュー領域を印刷するように設計されたカスタムGridViewデータ印刷ウィンドウを作成中です。1つのボタンは現在のウィンドウのグリッドビューを印刷し、もう1つのボタンはGridViewのすべてのレコードを印刷します。コードが現在のところ、ボタンをクリックすると(現在のページとすべてのレコードをそれぞれ印刷)、プレビューウィンドウにGridViewのすべてのレコードが完全に表示されます(GridViewの両側にある2つのコマンドフィールドを含む23列)。ただし、ジョブが印刷されると、どのプリンターまたはCSS /フォーマット設定を微調整しても、グリッドビューは切り刻まれます(グリッドの約半分のみが表示されます)。

私が直面している2つの課題は、1)縦向きまたは横向きで完全なグリッドビューを印刷できないこと、および2)JavaScriptがかなり弱いことです。次のコードを微調整して、グリッドビューが印刷されるときにフルグリッドが印刷されるようにするにはどうすればよいですか?

さらに詳しい情報が必要な場合は、遠慮なくお問い合わせください。

これが、印刷ボタンのaspxファイルの背後にあるコードです。

protected void PrintCurrentPage_Click(object sender, EventArgs e)
{
GridView1.PagerSettings.Visible = false;
GridView1.DataBind();
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.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=3000,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());
GridView1.PagerSettings.Visible = true;
GridView1.DataBind();

}

そして、これがすべてのレコードを印刷するためのコードです。

protected void PrintAll_Click(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
GridView1.DataBind();
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.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=3000,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());
GridView1.AllowPaging = true;
GridView1.DataBind();


}
4

2 に答える 2

1

グリッドの幅がそれほど大きい場合、デフォルトでは、すべてを同じページに印刷するためにできることはありません...

しかし、それは悪いニュースではありません。実際、ユーザーが印刷したときに同じグリッドをさまざまな方法で選択して表示するのに役立つ記事がいくつかあります。

私が見る最良の方法は、より多くの情報を1つの列に表示し、それらを別の列にグループ化して、ユーザーに関連するものにして、試してみることです...

これは単なる例であり、何を印刷するのかわかりませんが、顧客のすべてのフィールドを1行にまとめる代わりに、次のようにグループ化します。

Customer                  | Sales Responsible        | ...
------------------------------------------------------------------
Bruno Alexandre           | Techie Joe               | ...
My Street not yours, 56   | 43 sales this month      | ...
DK-1400 København         | 450.000€ per sale (avg)  | ...

class次に、そのテーブルを次のtable-print場所で装飾できます。

<style>
@media screen
{
  table-print {display:none;}
}
@media print
{
  table-print {display:block;}
}
@media screen,print
{
  ...
}
</style>

その後、ページ分割の処理方法をお読みください。

大きなHTMLテーブルを印刷するときのページ分割の処理方法

ユーザーが印刷したくないものを無効にするのに役立つPrintliminatorもあります...

于 2013-01-28T23:19:02.750 に答える
0

GridViewの方向をRTLに変更するには:

StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
hw.AddStyleAttribute(HtmlTextWriterStyle.Direction, "rtl");
于 2015-03-09T15:50:28.067 に答える