Imports System.IO
Imports System.Data.OleDb
Public Class Form6
    Dim conn As OleDbConnection
    Dim sql As OleDbCommand
    Dim rs As OleDbDataReader
    Dim sayfa_adet As Byte

    Private Sub Form6_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        conn.Close()
    End Sub

    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim sat As Integer
        DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Brown
        DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Blue
        conn = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\Test_Evren.mdb")
        conn.Open()
        sql = New OleDbCommand("Select * from Tablo1;", conn)
        rs = sql.ExecuteReader
        Do While rs.Read
            DataGridView1.Rows.Add()
            DataGridView1.Item(0, sat).Value = rs.GetValue(0)
            DataGridView1.Item(1, sat).Value = rs.GetValue(1)
            DataGridView1.Item(2, sat).Value = rs.GetValue(2)
            If sat Mod 2 = 0 Then
                DataGridView1.Rows(sat).DefaultCellStyle.BackColor = Color.DeepPink
                DataGridView1.Rows(sat).DefaultCellStyle.ForeColor = Color.White
            Else
                DataGridView1.Rows(sat).DefaultCellStyle.BackColor = Color.Cyan
                DataGridView1.Rows(sat).DefaultCellStyle.ForeColor = Color.Red
            End If

            sat = sat + 1
        Loop
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Dim sat As Integer
        DataGridView1.Rows.Clear()
        sql = New OleDbCommand("Select * from Tablo1 where Adi_Soyadi like '" & TextBox1.Text & "%';", conn)
        rs = sql.ExecuteReader
        Do While rs.Read
            DataGridView1.Rows.Add()
            DataGridView1.Item(0, sat).Value = rs.GetValue(0)
            DataGridView1.Item(1, sat).Value = rs.GetValue(1)
            If sat Mod 2 = 0 Then
                DataGridView1.Rows(sat).DefaultCellStyle.BackColor = Color.DeepPink
                DataGridView1.Rows(sat).DefaultCellStyle.ForeColor = Color.White
            Else
                DataGridView1.Rows(sat).DefaultCellStyle.BackColor = Color.Cyan
                DataGridView1.Rows(sat).DefaultCellStyle.ForeColor = Color.Red
            End If
            sat = sat + 1
        Loop
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Bir tane PrintDocument,bir tane printPriviewDialog Bir tanede PrintDialog ekleyin.
        'Bir command buton ekeleyin ve aşağıdaki gibi kodları yapıştırın.
        'Diğer kodlarıda PrintDocument1Print_Page olayına yazın.
        Dim sayfa_adet As Byte, yazici As String
        Try
            PrintDialog1.ShowDialog()
            sayfa_adet = PrintDialog1.PrinterSettings.Copies
            yazici = PrintDialog1.PrinterSettings.PrinterName
            PrintPreviewDialog1.Document = PrintDocument1
            PrintDocument1.DefaultPageSettings.PrinterSettings.PrinterName = yazici
            PrintDocument1.DefaultPageSettings.PrinterSettings.Copies = sayfa_adet
            'PrintDocument1.DefaultPageSettings.Landscape = True 'Yatay veya Dikey Olayı
            PrintPreviewDialog1.Width = 1150
            PrintPreviewDialog1.Height = 860
            PrintPreviewDialog1.ShowDialog()
        Catch exp As Exception
            MsgBox("Yüklenirken hata oluştu. Bilgisayarınıza tanımlı ve çalışır bir yazıcı olduğundan emin olunuz.", MsgBoxStyle.OkOnly, Me.Text)
        End Try
    End Sub
    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        'SAĞ-ORTA AYARLI FORMATLAR OLUŞTURULUYOR
        Dim sagdanhizaliformat = New StringFormat()
        sagdanhizaliformat.Alignment = StringAlignment.Far
        Dim ortadanhizaliformat = New StringFormat()
        ortadanhizaliformat.Alignment = StringAlignment.Center
        'FONT VE BÜYÜKLÜK YAZI TİPLERİ OLUŞTURULUYOR
        Dim FontNormal As New System.Drawing.Font("Tahoma", 7, System.Drawing.FontStyle.Regular)
        Dim FontBASLIK As New System.Drawing.Font("Microsoft Sans Serif", 11, System.Drawing.FontStyle.Bold)
        Static DonguSayi As Integer = 0
        Static SatirSayisi As Integer = 0
        Static Sayfa As Integer = 1
        e.Graphics.DrawString("TABLONUN BAŞLIĞINI BURAYA YAZ", FontBASLIK, Brushes.Black, 400, 50, ortadanhizaliformat)
        'Gridview Sütun Başlıklarını yaz;
        e.Graphics.DrawLine(Pens.DarkOrange, 20, 180, 800, 180) 'en üst YATAY çizgi
        e.Graphics.DrawString("ID", FontBASLIK, Brushes.DarkRed, 30, 160, New StringFormat())
        e.Graphics.DrawString("ADI SOYADI", FontBASLIK, Brushes.DarkRed, 100, 160, New StringFormat)
        e.Graphics.DrawString("KG", FontBASLIK, Brushes.DarkRed, 300, 160, New StringFormat)
        'e.Graphics.DrawString("Başlık3", FontNormal, Brushes.DarkRed, 490, 150, New StringFormat)
        'şimdide gridviewindeki satır sayısı kadar döngü kurup başlıkların altına değerleri yazdırıyoruz
        For T = DonguSayi To DataGridView1.Rows.Count - 1
            e.Graphics.DrawString(DataGridView1.Item(0, T).Value, FontNormal, Brushes.Blue, 30, 180 + (SatirSayisi * 15), New StringFormat())
            e.Graphics.DrawString(DataGridView1.Item(1, T).Value, FontNormal, Brushes.Blue, 100, 180 + (SatirSayisi * 15), New StringFormat())
            e.Graphics.DrawString(DataGridView1.Item(2, T).Value, FontNormal, Brushes.Blue, 300, 180 + (SatirSayisi * 15), New StringFormat())
            'e.Graphics.DrawString(Grid.Rows(T).Cells(2).Value, FontNormal, Brushes.Black, 490, 180 + (SatirSayisi * 15), New StringFormat)
            SatirSayisi += 1
            DonguSayi += 1
            If SatirSayisi = 15 Then  ' 15=her sayfaya gelecek maximum satır sayısı demek
                e.Graphics.DrawLine(Pens.DarkOrange, 20, 180 + (SatirSayisi * 15), 800, 180 + (SatirSayisi * 15))
                e.Graphics.DrawString("Alt Başlık Yazabilirsin: " & "EVREN DENEME ÖN İZLEME VE YAZDIRMA", FontNormal, Brushes.Gray, 30, 180 + (SatirSayisi * 15))
                e.Graphics.DrawString("Sayfa : " & Sayfa & "/" & Int(DataGridView1.Rows.Count / 15) + 1, FontNormal, Brushes.Gray, 790, 190 + (SatirSayisi * 15), sagdanhizaliformat)
                e.HasMorePages = True
                SatirSayisi = 0
                Sayfa += 1
                Exit Sub
            Else
                e.HasMorePages = False
            End If
        Next T
        e.Graphics.DrawString("Alt Başlık Yazabilirsin: " & "EVREN DENEME ÖN İZLEME VE YAZDIRMA", FontNormal, Brushes.Black, 30, 160 + (SatirSayisi * 20), New StringFormat)
        e.Graphics.DrawString("Sayfa : " & Sayfa & "/" & Int(DataGridView1.Rows.Count / 15) + 1, FontNormal, Brushes.Gray, 790, 180 + (SatirSayisi * 20), sagdanhizaliformat)
        DonguSayi = 0
        SatirSayisi = 0
        Sayfa = 1
        'burdaki örnek hem preview özelliğini yazdırmakla kalmıyor, Çok Can sıkıcı olan hasmorepage komutunuda sağlık bir biçimde işliyor.
    End Sub
End Class