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>
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.
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
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ı
serkan hocam konular eski takip ediyormusun bilmiyorum ama selamlar,
YanıtlaSilben 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ı
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
Silpeki default.aspx de serkansenyuz.cs göstermek gerekiyormu sınıflar konusunda zayıfım biraz
YanıtlaSilHayı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