Merhabalar.
Bu uygulama makalemizde ASP.Net data kontrollerinden GridView kontrolüne bir anlam daha kazandırıp, verileri listelemekle kalmayıp aynı zamanda Word ve Excel’e aktarım-transfer işlemlerini kısaca anlatmaya çalışacağım.
| Uygulamamızda kullanılacak olan materyaller : |
| 1. |
"Gridviewaktar.aspx", "Gridviewaktar.aspx.vb" |
| 2. |
"Gridviewaktar.aspx" ile aynı klasörde bulunan "urunresim" klasörü ve içinde "ekran1.jpg", "ekran2.jpg", "ekran3.jpg" adlarında temsili ürün resimleri. |
| 3. |
App_Data Varsayılan klasöründe bulunan "db.mdb" adlı access veritabanı. |
"db.mdb" veritabanımızda "tblurunler" tablosunu kullanacağız. Bu tablonun alan yapısı şu şekilde olacaktır.
Bu uygulama örnek teşkil edeceğinden ve önemli olanın verilerin aktarımını anlamamız olduğunu düşündüğümden ürün bilgilerini rastgele girdim.
Bu noktada kod yazma kısmına geçebiliriz.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="gridviewaktar.aspx.vb" Inherits="gridviewaktar" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Excel'e Aktar" />
<asp:Button ID="Button2" runat="server" Text="Word'e Aktar" />
<br />
<asp:GridView ID="GridView1" Width="400" runat="server" AutoGenerateColumns="False"
BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2"
DataKeyNames="urunid" DataSourceID="AccessDataSource1" Font-Names="Trebuchet MS" Font-Size="Small"
ForeColor="Black" GridLines="None">
<FooterStyle BackColor="Tan" />
<Columns>
<asp:BoundField DataField="urunid" HeaderText="Ürün ID" InsertVisible="False" ReadOnly="True"
SortExpression="urunid" />
<asp:BoundField DataField="urunadi" HeaderText="Ürün Adı" SortExpression="urunadi" />
<asp:BoundField DataField="urunfiyat" HeaderText="Fiyat" SortExpression="urunfiyat" />
<asp:BoundField DataField="urunozellik" HeaderText="Özellik" SortExpression="urunozellik" />
<asp:ImageField DataImageUrlFormatString="~\urunresim\{0}" ItemStyle-HorizontalAlign="Center"
ControlStyle-Height="50" ControlStyle-Width="50" DataImageUrlField="urunresim"
HeaderText="Resim">
</asp:ImageField>
</Columns>
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
<HeaderStyle BackColor="Tan" Font-Bold="True" HorizontalAlign="Left" />
<AlternatingRowStyle BackColor="PaleGoldenrod" />
</asp:GridView>
</div>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/db.mdb"
SelectCommand="SELECT * FROM [tblurunler]"></asp:AccessDataSource>
<br />
</form>
</body>
</html>
“Gridviewaktar.aspx” sayfamızı oluşturan kodlar bu kadar.
Kodları kısaca inceleyecek olursak sayfamıza bir GridView data kontrolü ekledik. Kolonların GridView tarafından otomatik oluşturulmasını engellemek için AutoGenerateColumns özelliğine Boolean veri tipinden False değerini atadık.
Kolonlar otomatik olarak oluşturulmayacağı için kolonları bir bir manuel olarak yazdık. ImageField türünden bir kolon ekledik ve DataImageUrlFormatString özelliğine sayfanın(Gridviewaktar.aspx) bulunduğu klasördeki urunresim klasörüne bakması gerektiğini belirttik.
Son olarak da {0} indexli parametre olarak DataImageUrlField özelliğinde belirlenen resim adını göndererek resmin ekranda görüntülenmesini sağladık.
AccessDataSource1, objesi ile veritabanımıza bağlandık ve amacımız veri çekmek olduğu için select ifadesini yazdık.
GridView data kontrolümüzü AccessDataSource1 bağlantı objemize DataSourceID özelliğini kullanarak ilişkilendirdik.
Herşey yolunda giderse sayfayı çağırdığımızda karşımıza gelecek olan ekran görüntüsü şu şekilde olacaktır.
Uygulamamızın geriye kalan kod kısmı ise şu olacaktır.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Aktar("Excel")
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Aktar("Word")
End Sub
Sub Aktar(ByVal paramtip As String)
Response.Clear()
Dim DosyaAdi As String = "aktar"
If paramtip = "Excel" Then
Response.AddHeader("content-disposition", "attachment;filename=" & DosyaAdi & ".xls")
Response.ContentType = "application/vnd.xls"
ElseIf paramtip = "Word" Then
Response.AddHeader("content-disposition", "attachment;filename=" & DosyaAdi & ".doc")
Response.ContentType = "application/vnd.doc"
End If
Response.Charset = "1254"
Dim stringWrite As New System.IO.StringWriter()
Dim htmlWrite As New HtmlTextWriter(stringWrite)
GridView1.RenderControl(htmlWrite)
Response.Write(stringWrite.ToString())
Response.End()
End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
End Sub
Hepsi bu kadar.
Kodların asıl amacı şu, postback işlemi ile gönderilen sayfanın Başlık(Header) bilgisinin aktar.xls, aktar.doc olacağını belirtiyoruz.
İçerik tipi olarak da aynı uygulama yapısını(application/vnd.*) kullanıyoruz.
GridView data kontrol objemizin RenderControl metodunu kullanarak kayıtları gösterime, aktarıma hazır hale getiriyoruz.
Son olarak da Response objesi ile yazdırma işlemi yaparak Word, Excel dosyamızı ekranımıza yazdırıyoruz.
Tabi bu yazdırma işlemi download olarak gerçekleşiyor.
Not: VerifyRenderingInServerForm alt yordamı mutlaka eklemek durumdayız. Bu alt yordam, Render işlemi için gereklidir.
Makalenin kaynak kodlarına ulaşmak için buraya tıklayınız.
Umarım faydalı olmuştur.
İsmail AKTAŞ