2011-11-09 10 views
3

自分のページに5つのビューを表示するマルチビューコントロールをコード内で使用しました。現在、CSSを使用して「印刷」機能を実装しようとしています。印刷するのが簡単なので、5つのビューをまとめて表示することをお勧めします。asp:マルチビューコントロール - 異なるタブではなく1つのタブですべてのビューを表示できます

したがって、すべてのビューをマルチビュー一度のショーのような。何か、すべてのビューまたはすべてのビューを表示します。

私は一度にすべてのビューを表示することができれば、私は私の印刷機能を回避することができます。助けてください。

答えて

2

私は、MultiViewコントロールが」doesnのことを信じていますこの機能をデフォルトでサポートしています。既存のMultiViewコントロールを継承し、目的の機能を追加することができます。

[DefaultProperty("Text")] 
[ToolboxData("<{0}:MyMultiView runat=server></{0}:MyMultiView>")] 
public class MyMultiView : MultiView 
{ 
    [Category("Behavoir")] 
    [DefaultValue(false)] 
    public bool RenderAllAtOnce 
    { 
     get 
     { 
      return (bool)(ViewState["RenderAllAtOnce"]?? false); 
     } 

     set 
     { 
      ViewState["RenderAllAtOnce"] = value; 
     } 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     if (!RenderAllAtOnce) 
     { 
      base.Render(writer); 
     } 
     else 
     { 
      foreach (View view in this.Views) 
      { 
       this.SetActiveView(view); 
       view.RenderControl(writer); 
      } 
     } 
    } 
} 

次に、既定のコントロールの代わりにそのコントロールを使用して、一部の[印刷]ボタンのクリック時にRenderAllAtOnceプロパティをtrueに設定できます。

また、あなたは、新しいコントロールの作成に関与していないことができ、単なる文字列にすべてのビューをレンダリングし、ページ上のいくつかのリテラルに渡し:

.print 
{ 
    display: none; 
} 

@media print 
{ 
    .noPrint 
    { 
      display: none; 
    } 

    .print 
    { 
      display: block !important; 
    } 
} 

<div class="noPrint"> 
    <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0" > 
      <asp:View ID="View1" runat="server"> 
       AAAA 
      </asp:View> 
      <asp:View ID="View2" runat="server"> 
       BBBB 
      </asp:View> 
      <asp:View ID="View3" runat="server"> 
       CCCC 
      </asp:View> 
    </asp:MultiView> 
    <asp:Button ID="btnPrint" runat="server" Text="Print" OnClick="btnPrint_Click" /> 
</div> 
<div class="print"> 
    <asp:Literal runat="server" ID="Literal1" Mode="PassThrough" /> 
</div> 

protected void btnPrint_Click(object sender, EventArgs e) 
{ 
    var sb = new StringBuilder(); 
    using (var writer = new StringWriter(sb)) 
    using (var htmlWriter = new HtmlTextWriter(writer)) 
    { 
     foreach (View view in MultiView1.Views) 
     { 
      view.RenderControl(htmlWriter); 
     } 
    } 

    Literal1.Text = sb.ToString(); 
    ClientScript.RegisterStartupScript(this.GetType(), "print", "window.print();", true); 
} 
+0

これは、完全に感謝万人を自分のニーズに会いました! –

関連する問題