Makale Özeti

Bu bölümde windows uygulamalarında DataSet nesnesinin kullanımı ve kullanıcılara DataSet nesnesi aracılığıyla veri üzerinde nasıl işlem işlem yaptırabileceğimiz üzerinde durcağız. Sql Server verilerinin windows form kontrollerine bağlanmasını ele alıyor olacağız. Bu bölümde öncelikle verilerin textbox, combobox ve datagrid gibi kontrollere bağlanmasını, parent-child ilişkilerinin programatik olarak kurulmasını ele alıyor olacağız ve bölümü, bölüm boyunca verdiğimiz örnekleri içeren geniş kapsamlı bir örnek ile sonlandıracağız.

Makale

4 - DataAdapter, DataSet, Form ve Form Kontrolleri
Bu bölümde windows uygulamalarında DataSet nesnesinin kullanımı ve kullanıcılara DataSet nesnesi aracılığıyla veri üzerinde nasıl işlem işlem yaptırabileceğimiz üzerinde durcağız. Sql Server verilerinin windows form kontrollerine bağlanmasını ele alıyor olacağız. Bu bölümde öncelikle verilerin textbox, combobox ve datagrid gibi kontrollere bağlanmasını, parent-child ilişkilerinin programatik olarak kurulmasını ele alıyor olacağız ve bölümü, bölüm boyunca verdiğimiz örnekleri içeren geniş kapsamlı bir örnek ile sonlandıracağız.

 

Form’a DataSet Eklemek
Her ne kadar DataReader oldukça kullanışlı olsa da çoğu uygulama forward-only ve read-only bir yapıdan fazlasına ihtiyaç duyar. .NET uygulamalarında bu gereksinimi DataSet ile karşılıyoruz. DataSet nesnesi bir veya daha çok sayıda tablo içerebilir (ve bu tablolar arasında ilişkiler kurulabilir), değişiklikleri local olarak kullanıma sunabilir veya veri kaynağını güncelleyebilir.

 

DataSet local bir veri kaynağı olarak görülebilir ancak kullanılacak verilerin DataSet’e aktarılması gerekmektedir. Bu işlem için, SQL Server üzerindeki verileri, DataSet’e aktarmak için köprü görevi gören DataAdapter nesnesini kullanırız. Sunucu üzerindeki veri kaynağını bir SQL ifadesi, tablo adı, view veya stored procedure adı ile belirtebiliriz. DataAdapter nesnesinin iki ana görevi vardır. Birincisi, veri kaynağındaki verileri DataSet’e aktarır. Bu bölümde ilk olarak bu rolün üzerinde duracağız. İkinci olarakta local DataSet’teki güncellemeleri veri kaynağı ile senkronize etmek. Bu rolün üzerinde ise bu bölümün ikinci yarısında duracağız.

 

Veri kaynağından seçilecek verileri belirlemek için DataAdapter nesnesinin SelectCommand özelliğine ilgili SQL ifadesini yazarız. Veri kaynağındaki verileri DataSet’e DataAdapter nesnesinin Fill metodunu kullanarak aktarırız. Bu metod iki arguman kullanır. Birincisi verilerin aktarılacak DataSet’in adı, ikinci olarak kullanılacak DataSet’te verilerin kopyalanacağı tablo adı. DataSet içindeki tablolara, belirttiğiniz isimler ile erişebileceğiniz gibi index değerleriyle de (ilk eklenen tablo çin 0, sonraki her tablo için 1 artar) erişebilirsiniz.

 

Aşağıdaki örnek prosedür, DataAdapter nesnesi ve Command nesnesi kullanarak bir DataSet’in nasıl kullanılabileceğini göstermektedir.

 

 

    DataSet nesnesini modül seviyesinde tanımlıyoruz

    Böylece modül içindeki her yerden erişilebilecek

    Dim ds As New DataSet


Sub
Populate()

        DataAdapter tarafından kullanılacak

        Northwind veritabanı bağlantısı

        Dim c As New SqlConnection _

            ("Data Source=(local);" & _

            "Integrated Security=SSPI;" & _

            "Initial Catalog=northwind")

 

        DataSet için veri kaynağı görevi görecek olan

        Command ve DataAdapter nesnelerini tanımlıyoruz

        Dim cmd As SqlCommand = _

            New SqlCommand _

            ("SELECT CategoryID, CategoryName, Description " & _

            "FROM Categories", _

            c)

        DataAdapter nesnesini tanımlıyoruz

        Dim da As New SqlDataAdapter

        DataAdapter nesnesinin SelectCommand özelliğine

        Oluşturduğumuz SqlCommand nesnesini atıyoruz

        da.SelectCommand = cmd

        Bağlantıyı açıyoruz

        c.Open()

 

 

 

        DataAdapterı kullanarak DataSetin (ds) içinde

        Categories adlı bir tablo oluşturuyoruz ve Select

        ifadesinin çalıştırılması sonucu dönen sonuç kümesini

        Bu tabloya aktarıyoruz

        da.Fill(ds, "Categories")

 

        DataSet ile çalışmak için aktif bir

        bağlantıya ihtiyaç duymadığımız için

        Veritabanı bağlantısını kapatıyoruz

        c.Close()

    End Sub

 

Bu noktadan sonra ds adlı DataSet form üzerindeki her noktadan erişilebilir hale gelecektir. DataSet içindeki Categories adlı tablo kullanılarak veri üzerinde işlemler yapılabilir. Şimdi oluşturulan bir DataSet içindeki verilerin form üzerindeki kontrollere bağlanmasını görelim..

 

Verinin Form Kontrollerine Bağlanması
Verileri DataSet’e aktardıktan sonra Form üzerideki kontrollerde bu verileri görüntülemek istediğimizi söyledik. Bu işi gerçekleştirmek için iki temel yöntem vardır.  Simple Data Binding yönteminde yerel veri kaynağındaki (örneğin DataSet içinde yer alan bir DataTable) bir sütunu bir kontrolün istenilen özelliğine örneğin TextBox kontrolünün Text özelliğine bağlar. Yerel veri kaynağındaki sütunlardan birini kontrolün istenilen özelliğine bağlamak için kontrolün DataBindings kolleksiyonunu kullanırız. Complex Data Binding ise kullanabileceğimiz diğer bir yöntemdir. Bu yöntemde kontrol (örneğin combobox, datagrid veya listbox) bir sütun kolleksiyonuna (örneğin DataSet içindeki DataTable) bağlanır. Bu bölümde her iki veri bağlama yönteminide örnekliyor olacağız ve bu örneklerde bir önceki bölümde oluşturduğumuz Populate adlı prosedürü kullanıyor olacağız. Aşağıdaki grafikte formumuzun tasarım ve çalışma aşamalarındaki görünümü yer almaktadır.

 


Şekil 4:1 – Formun tasarım ve çalışma zamanındaki görüntüleri

 

İlk olarak Form yüklenirken Populate adlı prosedürü çağırarak DataSet’in oluşturulmasını ve Form üzerindeki kontrollerin DataSet içindeki DataTable nesnesinin sütunlarına bağlanmasını sağlayacak kodları yazıyoruz...

    

    Private Sub Form4_Load(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles MyBase.Load

        Populate prosedürünü çağırarak DataSetin

        oluşturulmasını ve verilerin DataSete

        aktarılmasını sağlıyoruz

        Populate()

        TextBox kontrollerini DataSet içindeki

        Categories tablosunun farklı sütunlarına

        bağlıyoruz

        TextBox1.DataBindings.Add _

           (New Binding("Text", ds, "Categories.CategoryID"))

        TextBox2.DataBindings.Add _

           (New Binding("Text", ds, "Categories.Description"))

        Combobox kontrolünüde Categories

        tablosuna bağlıyoruz. DataSet sadece 1

        tablo içerdiği için tablo indexi 0 oluyor

        ComboBox1.DataSource = ds.Tables("Categories")

        ComboBox1.DisplayMember = "CategoryName"

        Birinci kayıda gidiliyor

        Me.BindingContext(ds.Tables(0)).Position = 0

    End Sub

 

Daha sonra Combobox’ta yapılan seçim değiştiğinde Form üzerindeki kontrollerin, seçilen Kategorinin indexine göre görüntüledikleri verilerin güncellenmesini sağlayacak kodları yazıyoruz..

 

Private Sub ComboBox1_SelectedIndexChanged _

 (ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles ComboBox1.SelectedIndexChanged

 

        Comboboxta seçilen Combobox elemanının

        index değerine göre Form üzerindeki kontrollerin

        görüntüledikleri kayıtlar değiştiriliyor

        Me.BindingContext(ds, "Categories").Position _

            = Me.ComboBox1.SelectedIndex

End Sub

 

Karışık formlarla çalışırken simple data binding kullandığımız durumlarda (özellikle bizim hazırlamadığımız formlar üzerinde çalışmamız gerektiğinde) DataBinding raporu almak formu analiz etmemizi son derece kolaylaştıracaktır. Örneğimizdeki button bizim form’un databinding kolleksiyonunun raporunu almamızı sağlayacak kodları içerecek.

 

Aşağıdaki prosedür (PrintBindingMemberInfo) parametre olarak bir formun referansını alır ve iki adet döngü çalıştırır. Birinci döngüde form üzerindeki kontrolleri, ikinci döngüde ise birincei döngüden dönen kontrollerin DataBinding özelliğini sırayla kontrol eder ve rapor için hazırlar.

 

    Sub PrintBindingMemberInfo(ByRef f As Form)

        Dim c As Control

        Dim s As String

        For Each c In f.Controls

            Dim t As Binding

            For Each t In c.DataBindings

  Görüntülenecek rapor hazırlanıyor

  s = s & ControlChars.Cr + c.ToString()

  Dim bInfo As BindingMemberInfo = t.BindingMemberInfo

  s = s & "Binding Path " + ControlChars.Tab + bInfo.BindingPath

  s = s & "Binding Field " + ControlChars.Tab  + bInfo.BindingField

  s = s & "Binding Member " + ControlChars.Tab + bInfo.BindingMember

  s = s & ControlChars.CrLf

            Next t

        Next c

        MsgBox(s)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button1.Click

        raporu oluşturacak prosedürü çağırıyor ve

        parametre olarak aktif formu temsilen Me

        değerini gönderiyoruz

        PrintBindingMemberInfo(Me)

    End Sub

Bu kodları ekledikten sonra Button1 tıklandığında karşımız gelecek rapor aşağıdaki gibi olacaktır.

 

Şekil 4:2 – DataBinding Raporu

 

Bu prosedür aynı zamanda aktif olmayan formlar içind de kullanılabilir.  Aşağıdaki prosedür Form1 üzerinden Form2’ye ait DataBinding raporu alabilmemizi sağlamaktadır.

 

  Sub Form2DataBindingRaporu()

        Dim f As New Form2

        PrintBindingMemberInfo(f)

    End Sub

 

DataSet’in Parent-Child İlişkili Tablolar ile Birlikte Kullanımı

Tek bir tablo ile çalışabileceğimiz gibi DataSet içinde birden çok sayıda DataTable’da oluşturabiliriz. ADO.NET, ado gibi tüm kayıtları tek bir sonuç kümesinde birleştirmek yerinde birden çok DataTable arasındaki ilişkiyi hiyerarşik olarak tanımlamanıza olanak sağlıyor. Bu bölümde iki DataTable nesnesi içeren bir DataSet ile çalışma konusunu ele alacağız. Ek olarak DataGrid’de görüntülenen kayıtların kontrol edilmesi için bir ComboBox kontrolünün kullanımını görüyor olacağız. DataGrid’de görüntülenecek kayıtların ComboBox’a göre filtrelenmesi işlemini gerçekleştirebilmek için DataView kullanacağız. DataView nesnesi, Datagrid için DataSource olacaktır.

 

Aşağıdaki grafiklerde örneğimizin form tasarımını ve çalışma zamanı görüntülerini görebilirsiniz. 


Şekil 4:3 – Tasarım Görünümü

Şekil 4:4 – Çalışma Zamanı Görünümü

 

Bu örnekte kullandığımız DataSet nesnesi Products ve Categories DataTable nesneleri arasında bir ilişki tanımlar. Aşağıda, örneğin adım adım kodlarını açıklamalarıyla birlikte görebilirsiniz:

 

 

    Modül seviyesinde tanımlamalar

    DataSet, DataView ve DataRelation

    nesnelerimizi tanımlıyoruz

    Dim das1 As DataSet

    Dim dav1 As DataView

    Dim rel1 As DataRelation

 

    Sub Populate()

 

        DataAdapter tarafından kullanılacak

        Northwind veritabanı bağlantısı

        Dim cnn1 As SqlConnection = _

            New SqlConnection _

            ("Data Source=(local);" & _

            "Integrated Security=SSPI;" & _

            "Initial Catalog=northwind")

 

        DataAdaptera DataSete aktaracağı verileri

        aktaracak bir command nesnesi oluşturuyor

        ve sorgu ifademizi yazıyoruz

        Dim cmd1 As SqlCommand = _

            New SqlCommand _

            ("SELECT CategoryID, CategoryName, Description " & _

                "FROM Categories", _

                cnn1)

        DataAdapter nesnesini tanımlıyoruz

        Dim dap1 As SqlDataAdapter = New SqlDataAdapter

        DataAdapter nesnesinin SelectCommand

        özelliğine cmd1 Command nesnesini atıyoruz

        dap1.SelectCommand = cmd1

        Bağlantıyı açıyoruz

        cnn1.Open()

 

        DataAdapter nesnesinin Fill metodunu kullanarak

        Northwind veritabanından gelen verileri

        DataSette oluşturduğumuz Categories

        adlı DataTablea  aktarıyoruz

        das1 = New DataSet

        dap1.Fill(das1, "Categories")

 

        Products tablosundan yapacağımız sorgulama için

        SQL ifadesini yeniden belirtiyoruz

        cmd1.CommandText = "SELECT CategoryID, ProductID, " & _

            "ProductName, UnitsInStock, Discontinued " & _

            "FROM Products"

        dap1.SelectCommand = cmd1

 

 

        DataSet içinde Products adlı yeni bir

        DataTable oluşturuyor ve DataAdapterın Fill

        metodu ile ikinci sonuç kümesini bu tabloya

        aktarıyoruz

        dap1.Fill(das1, "Products")

 

        Bağlantıyı kapatıyoruz

        cnn1.Close()

 

    End Sub

 

    Sub RelateProductsToCategories()

 

        DataSet içindeki Products ve Categories adlı

        datatablelar için ilişki kuracağımız

        Parent ve child sütunları tanımlıyoruz

        Dim parentcol As DataColumn

        Dim childcol As DataColumn

        parentcol = das1.Tables("Categories").Columns("CategoryID")

        childcol = das1.Tables("Products").Columns("CategoryID")

 

        DataRelation oluşturuyoruz

        rel1 = New DataRelation _

            ("CategoriesProducts", parentcol, childcol)

        das1.Relations.Add(rel1)

    End Sub

 

    Private Sub ComboBox1_SelectedIndexChanged _

        (ByVal sender As System.Object, _

        ByVal e As System.EventArgs) _

        Handles ComboBox1.SelectedIndexChanged

 

        Seçilen ComboBox elemanına göre DataView

        üzerinde filtreleme yapıyoruz

        Dim strFilter = "CategoryID = " & _

            (ComboBox1.SelectedIndex + 1).ToString

        dav1.RowFilter = strFilter

 

    End Sub

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Form yüklenirken ilk olarak Populate prosedürünü çalıştırıyoruz

        Populate()

 

        Daha sonra ilişkilerin kurulduğu

        RelateProductsToCategories prosedürünü çağırıyoruz

        RelateProductsToCategories()

 

        ComboBox kontrolünü 0 indexli tabloya yani

        Categories tablosuna bağlıyoruz

        ComboBox1.DataSource = das1.Tables(0)

        ComboBox1.DisplayMember = "CategoryName"

        Me.BindingContext(das1.Tables(0)).Position = 0

 

        Products tablosuna dayanan yeni bir DataView oluşturuyor

        ve ComboBoxın SelectedIndex değerine bağlı olarak

        bir filtre oluşturuyoruz

        dav1 = New DataView(das1.Tables("Products"))

        Dim strFilter = "CategoryID = " & _

            (ComboBox1.SelectedIndex + 1).ToString

        dav1.RowFilter = strFilter

 

        DataViewı DataGrid için DataSource olarak belirtiyoruz

        DataGrid1.DataSource = dav1

 

    End Sub

 

Buraya kadar tek bir form üzerinde veri işlemleri gerçekleştirdik. Bölümün sonunda birden çok form içeren uygulamalarda veritabanı işlemlerini nasıl gerçekleştirebileceğimizi gösteren bir uygulama geliştireceğiz.

 

Çoklu Formlarda Veritabanı İşlemleri
Bölümün sonunda iki form içeren ve yine verinin kontrollere bağlanmasına dair örnekler içeren bir uygulama geliştireceğiz.

 

Bu bölümdeki uygulama ayrı ayrı gerçekleştirdiğimiz bazı işlemlerin bir arada kullanımına örnek teşkil etmesi açısındanda önemlidir. Uygulamamızın birinci formunda bir il seçimi gerçekleştiriliyor. Birinci formda comboboxtan yapılan bu seçim button’un tıklanması ile ikinci forma gönderiliyor. İkinci form gelen parametreye bağlı olarak iki DataTable nesnesi oluşturuyor. Birinci DataTable’da gönderilen değer bir stored procedure’un çalıştırılması için parametre olarak kullanılıyor. İkinci DataTable ise yine gönderilen parametreye göre oluşturulan bir SQL ifadesine bağlı olarak çalıştırılıyor. Bu tablo ikinci formda bulunan textboxları doğrudan güncellemez, bunun yerine metin kutularını ikinci DataTable nesnesine dayanan DataView nesnesine bağlıyoruz ancak comboboxta yapılan seçime bağlı olarak filtreliyoruz.

 

Örneği geliştirmeye başlamadan önce kullanacağımız stored procedure’u hazırlamamız gerekiyor. Kodlar aşağıdaki gibi..

 

 

--Northwind veritabanı ile çalışıyoruz.

USE Northwind

GO

 

--udpCitiesInCustomersCountry

-- adında bir SP varsa siliyoruz

IF EXISTS (SELECT ROUTINE_NAME

    FROM INFORMATION_SCHEMA.ROUTINES

    WHERE ROUTINE_TYPE = PROCEDURE AND

    ROUTINE_NAME = udpCitiesInCustomersCountry)

    DROP PROCEDURE udpCitiesInCustomersCountry

GO

 

--udpCitiesInCustomersCountry adlı SP’yi oluşturuyoruz

CREATE PROC udpCitiesInCustomersCountry

@country nvarchar (15) = USA

AS

SELECT DISTINCT City

FROM Customers

WHERE Country = @country

GO

 

Formlarımızın tasarım aşamasındaki görünümleri ise aşağıdaki gibidir.

 


Şekil 4:5 – Tasarım Görünümü

 

Birinci formun kodları ve açıklamaları aşağıdaki gibidir.

 

 

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Close düğmesinin görüntülenmemesini

        sağlamak için border stilini değiştiriyoruz

        Me.FormBorderStyle = FormBorderStyle.None

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button1.Click

        Dim f As New Form4

        İkinci formdaki Country değişkenine

        Metin kutusundaki değeri atıyoruz

        f.Country = TextBox1.Text

        İkinci formu aç ve bu formu gizle

        f.Show()

        Me.Hide()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles Button2.Click

        Uygulamayı kapat.

        Application.Exit()

    End Sub

 

İkinci formun (örnek projemde Form4 adlı form) kodları ve açıklamalar aşağıdaki gibidir:

 

    DataSet ve DataView nesnelerimizi

    Modül seviyesinde tanımlıyoruz

    Dim das1 As New DataSet

    Dim dav1 As New DataView

 

    Form Load eventinde Combobox1i değişikliklere

    karşı denetleyecek boolean değişken

    Dim bolViewSetInFormLoad As Boolean

 

    Country değişkenini Public olarak tanımlıyoruz

    Böylece birinci formdan değer atayabileceğiz

    Public Country As String

 

    Sub Populate()

 

        Northwind bağlantısı

        Dim cnn1 As SqlConnection = _

            New SqlConnection("Data Source=(local);" & _

                "Integrated Security=SSPI;" & _

                "Initial Catalog=northwind")

 

 

        udpCitiesInCustomersCountry adlı SPyi çalıştıracak

        Command nesnesini oluşturuyoruz

        Dim cmd1 As SqlCommand = _

            New SqlCommand("udpCitiesInCustomersCountry", cnn1)

        cmd1.CommandType = CommandType.StoredProcedure

 

        SqlDbType ile Command için parametre tanımlıyor ve

        Country adlı public değişkene birinci formdan gelen 

        değere bağlı olarak değer atıyoruz

        Dim prm1 As SqlParameter = _

            cmd1.Parameters.Add("@country", SqlDbType.NVarChar, 15)

        prm1.Value = Country

 

        Oluşturduğumuz command nesnesini DataAdapter nesnesi için

        SelectCommand özelliğine atıyoruz

        Dim dap1 As SqlDataAdapter = New SqlDataAdapter

        dap1.SelectCommand = cmd1

        cnn1.Open()

 

        Fill the data set das1 with the data adapter dap1;

        the Fill method populates the data set with the

        udpCitiesInCustomersCountry result set and names

        the resulting datatable CitiesInCountry.

 

        DataAdapterı kullanarak Oluşturduğumuz DataSetin

        içinde CitiesnCountry adlı bir DataTable oluşturuyor

        ve sonuç kümesini bu DataTablea aktarıyoruz

        dap1.Fill(das1, "CitiesInCountry")

 

        Command nesnesinin Commandtext özelliğine bir

        SQL ifadesi atıyor, CommandType özelliğinin değerini

        Text olarak değiştiriyor ve yeni sorgu için hazır

        hale getiriyoruz

        cmd1.CommandText = "SELECT CustomerID, " & _

            "ContactName, Phone, City " & _

            "FROM Customers " & _

            "WHERE Country = " & Country & ""

        Eklediğimiz parametreyi kaldırıyoruz

        cmd1.Parameters.Remove(prm1)

        cmd1.CommandType = CommandType.Text

        dap1.SelectCommand = cmd1

 

        Yeni SQL ifadesinin sonucunda dönen sonuç kümesini

        CustomersInCountry adlı ikinci DataTable nesnesine

        aktarıyoruz

        dap1.Fill(das1, "CustomersInCountry")

 

        Bağlantıyı kapatıyoruz

        cnn1.Close()

 

    End Sub

 

 

 

    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Form yüklenirken Populate adlı prosedürü

        çalıştırıyoruz

        Populate()

 

        Comboboxı DataSet içindeki birinci

        DataTablea bağlıyoruz. ComboBoxın displaymember

        ve valuemember değerlerini DataTabledaki birinci

        sütuna eşitliyoruz

        MsgBox(das1.Tables.Count)

        ComboBox1.DataSource = das1.Tables(0)

        ComboBox1.DisplayMember = _

            das1.Tables(0).Columns(0).ColumnName

        ComboBox1.ValueMember = _

            das1.Tables(0).Columns(0).ColumnName

 

        CustomersInCountry DataTable nesnesine bağlı olarak

        bir DataView nesnesi oluşturuyoruz ve form açıldığında

        ComboBoxtaki seçili değer bağlı olarak filtreleme yapıyoruz

        dav1 = New DataView(das1.Tables("CustomersInCountry"))

        Dim strFilter = "City = " & ComboBox1.SelectedValue & ""

        dav1.RowFilter = strFilter

        Form Load eventi DataViewin filtresini belirledikten sonra

        bolViewSetInFormLoad değişkeninin değerini varsayılan

        False değerinden True olarak değiştiriyoruz

        bolViewSetInFormLoad = True

        Metin kutularını DataViewdeki ilgili

        alanlara bağlıyoruz

        TextBox1.DataBindings.Add _

           (New Binding("Text", dav1, "CustomerID"))

        TextBox2.DataBindings.Add _

           (New Binding("Text", dav1, "ContactName"))

        TextBox3.DataBindings.Add _

           (New Binding("Text", dav1, "Phone"))

 

        Navigasyon butonlarını görüntüleyip görüntülemeyeceğimizi

        DataViewde yer alan satır sayısı belirleyecek

        ShowNavButtons(dav1.Count)

        Formun kapat butonu dışında bir yöntemle kapatılmasını

        önlemek için ControlBox,MinimizeBox ve Maximizebox

        özelliklerini false olarak belirliyoruz

        Me.MinimizeBox = False

        Me.MaximizeBox = False

        Me.ControlBox = False

    End Sub

 

    Sub ShowNavButtons(ByVal NavNum As Integer)

        Eğer seçilen şehirde birden çok müşteri varsa

        Navigasyon butonlarını aktif hale getiriyoruz

        If NavNum > 1 Then

            Button1.Visible = True

            Button2.Visible = True

            Button3.Visible = True

            Button4.Visible = True

        Else

            Button1.Visible = False

            Button2.Visible = False

            Button3.Visible = False

            Button4.Visible = False

        End If

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged _

        (ByVal sender As System.Object, _

        ByVal e As System.EventArgs) _

        Handles ComboBox1.SelectedIndexChanged

        ComboBoxta yapılacak seçime bağlı olarak

        DataViewin Filtresini güncelliyoruz

        If bolViewSetInFormLoad = True Then

            Dim strFilter = "City = " & _

            ComboBox1.SelectedValue & ""

            dav1.RowFilter = strFilter

        End If

        Navigasyon butonlarını görüntüleyip görüntülemeyeceğimizi

        DataViewde yer alan satır sayısı belirleyecek

        ShowNavButtons(dav1.Count)

    End Sub

 

    ### Navigasyon Butonları ###

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Birinci kayıt görüntülenir

        Me.BindingContext(dav1).Position _

            = Me.BindingContext(dav1).Position.MinValue

    End Sub

 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Bir önceki kayıt

        Me.BindingContext(dav1).Position -= 1

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Bir sonraki kayıt

        Me.BindingContext(dav1).Position += 1

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Son kayıt görüntülenir

        Me.BindingContext(dav1).Position _

            = Me.BindingContext(dav1).Position.MaxValue

    End Sub

 

    ### kapat ###

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Uygulamayı Kapat

        Application.Exit()

    End Sub

 

Uygulamanın çalışma zamanındaki görünümü ise şu şekilde;


Şekil 4:6 – Uygulamanın Çalışma Zamanı Görüntüleri

 

Bir sonraki bölümde, ADO.NET ile verileri silme, düzenleme ve yeni veri ekleme konularını ele alıyor olacağız..

Kadir SÜMERKENT
kadirs@yazgelistir.com