Ana içeriğe atla

Asp.Net Web uygulamamızda yazdırma işlemini nasıl yaparız ?

Asp.Net web uygulamalarınızın rapor kısımları var, bir kaç data kontrolüne ait bir tablonuzu kullanıcıların çıktı almaları gerekli...

Birazdan devamını okuyacağınız blogda Visual Basic.Net ile web uygulamamıza  yazdırma buttonu ekleyecek, istediğimiz sayfalarda kullanacağımız yeni bir Class yazacağız.Böylece yazdırma işlemlerinde hazır olan classı istediğimiz sayfada çağırıp kullanıcılarımıza yazdırma ekranını göstereceğiz.


Asp.Net web uygulamalarında yazdırma işlemini tasarımcılar pek kullanmazlar.Kullanmaları gerektiğinde ise küçük bir javascript cümleciğine başvururlar, bu elbette yetersiz bir çözümdür.Uygulamanızda Data GridView-Data List gibi Asp.Net kontollerini kullanmışsanız yazdırma işlemi mutlaka gerekecektir.Biz bu blogta bu iş için bir class yazacağız ve bu class ı uygulamamız içinde istediğimiz zaman kolayca kullanacağız.

Bundan sonraki yapmanız gereken işlemleri adım adım yazağım.Başlıyoruz.

 Uygulamanıza yeni bir class açın yeni class Uygulamanızda App_Code klasöründe olacak...
 Default.aspx ve Print.aspx adında iki yeni sayfa edinin.




1- Yazdırma Kontrolü sınıfınızı oluşturun

Public Class SerkanSenyuz
    Public Sub New()
    End Sub

    Public Shared Sub PrintWebControl(ByVal ctrl As Control)
        PrintWebControl(ctrl, String.Empty)
    End Sub

    Public Shared Sub PrintWebControl(ByVal ctrl As Control, ByVal Script As String)
        Dim stringWrite As StringWriter = New StringWriter()
        Dim htmlWrite As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(stringWrite)
        If TypeOf ctrl Is WebControl Then
            Dim w As Unit = New Unit(100, UnitType.Percentage)
            CType(ctrl, WebControl).Width = w
        End If
        Dim pg As Page = New Page()
        pg.EnableEventValidation = False
        If Script <> String.Empty Then
            pg.ClientScript.RegisterStartupScript(pg.GetType(), "PrintJavaScript", Script)
        End If
        Dim frm As HtmlForm = New HtmlForm()
        pg.Controls.Add(frm)
        frm.Attributes.Add("runat", "server")
        frm.Controls.Add(ctrl)
        pg.DesignerInitialize()
        pg.RenderControl(htmlWrite)
        Dim strHTML As String = stringWrite.ToString()
        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.Write(strHTML)
        HttpContext.Current.Response.Write("<script>window.print();</script>")
        HttpContext.Current.Response.End()
    End Sub
End Class

2- Print.aspx sayfanızın Page Load


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ctrl As Control = CType(Session("ctrl"), Control)
        
SerkanSenyuz.PrintWebControl(ctrl)
    End Sub


3- Default.aspx sayfanıza bir asp panel içine bir button ekleyin

<asp:Panel ID="Panel1" runat="server">
        Test Pege Print Serkan Şenyüz
    <asp:button ID="btnPrint" runat="server" text="Button" />
    </asp:Panel>


4-  "btnPrint" Click Event





Protected Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click





        Session("ctrl") = Panel1
        ClientScript.RegisterStartupScript(Me.GetType(), "onclick", "<script language=javascript>window.open('Print.aspx','PrintMe','height=300px,width=300px,scrollbars=1');</script>")
    End Sub




Evet yukarıdaki işlemleri uygulamaya geçirdiğinizde yazdırma işlemi kullanıcılarınıza Printer.aspx sayfasında bir çıktı görünümünde (300x300) şeklinde görüntülenir ve ardından yazıcı seçmesi için dialog penceresi açılır.Bu gayet basit yöntem ile yeni bir Asp.Net yazıcı kontrolüne sahip oldunuz. 4 ncü aşamadaki yazılmış Panel1 içinde bulunan her görünüm yazdıralacaktır.Buna göre Data kontrollerinizi (GridView-FormView-Datalist) Panel içinde olması gerekir.
      Bu Yazının Sponsorları













Yorumlar

  1. serkan hocam konular eski takip ediyormusun bilmiyorum ama selamlar,
    ben bu bahsettiğin koları C# çevirerek uygulamaya çalıştım fakat session tanımsız kaldı namespace olarak mevcut çıkıyor uygulamasında mı bir sıkıntı var acaba fikrin varmı

    YanıtlaSil
    Yanıtlar
    1. Evet haklısın bir yıldır yoğunluktan dolayı bu blog'a pek yazamıyorum ancak yorumları yanıtlıyorum, Kodlarda sorun olmadığını biliyorum.Vb.Net olarak aynen yukarıdaki yazdıklarım gibi bir dene bence, belkide convert ederken bir şey atlamış olabilirsin

      Sil
  2. peki default.aspx de serkansenyuz.cs göstermek gerekiyormu sınıflar konusunda zayıfım biraz

    YanıtlaSil
    Yanıtlar
    1. Hayır. Default.aspx 'de sadece asp:panel ID="Panel1" olması, button ve click event olması yeterli. Print.aspx page de ise PageLoad yukarıdaki kodu yazarsan sorun olmayacaktır.

      Sil

Yorum Gönder

Bu blogdaki popüler yayınlar

Firebird SQL Table oluşturma ve SQL komutları

2 nci  Firebird SQL veritabanı blogunda bu kez mevcut Firebird veritabanına ISQL ile bağlanmayı veritabanı nesnelerini oluşturmayı (create table), Kayıt eklemeyi (ınsert) ve kayıtları izlemeyi (show) ile önemli SQL komutlarını anlatmaya çalışacağım...

Firebird Veritabanı Nedir ? Nasıl Kullanılır

Firebird ücretsiz veritabanı kullanmaya ne dersiniz.Üstelik hiç bir süre ve veri sınırı olmadan kulağa hoş geliyor değilmi.Bu Blogta Borland açık kaynak interbase 6 sürümünden sonra ortaya çıkmış ve gelişimini sürekli sürdürmüş Firebird veritabanına bir göz atıcaz. İnternet üzerinde Firebird ile kaynağa çok sık rastlamazsınız artık bu blogtan Firebird ile ilgili bilgileri takip edebilirsiniz...

Asp.Net Access veritabanina resim ve nesne kaydetmek OLE Nesnesi

Ms Access ile ilgili geçmiş yazılarım arasında biraz vakit geçirmişseniz, Ms Access form uygulamaları yada veritabanı olarak kullanmayı sevdiğimi anlamışsınızdır. Birazdan size anlatmaya çalışacağım konu Ms Access veritabanı olarak kullandığımız bir Asp.Net Web projesinde resimleri ve dosyaları paket halinde veritabanının içine gömmek olacak.Neden bilmiyorum bu konuda Türkçe kaynak yok, merak etmeyin bu yazı size iyi gelecek...