Son Haberler
Anasayfa / Yazılım / ASP.NET / DropDownList Kontrolünün Veritabanı ile Doldurulması

DropDownList Kontrolünün Veritabanı ile Doldurulması

Bu örneğimde bir DropDownList kontrolünün veritabanından alınan veriler ile nasıl doldurulabileceğini göstermek istiyorum. Yine kullanacağım veritabanı Northwnd veritabanı. Açıklamaları başta yapmak yerine adım adım yapmayı tercih ediyorum ve direkt örneğime geçiyorum. Yeni bir WEB project oluşturdum. Oluşan projemde, web config dosyamı açıyorum ve ConnectionString oluşturuyorum.

web.config :







    
        
    
  
    
  

Böylelikle database bağlantımı sağlayacak kod kısmımı yazdım. Şimdi bir asp web formu sayfası oluşturuyorum, adı default aspx sayfası adında. Bu web formuma ben iki adet DropDownList kontrolü ekliyorum.

Default.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>





    


    
Product (Ürün) :



Örneğimi mümkün olduğunca basit tutuyorum, tasarım vs katmıyorum çünkü konumuz değil. Dolayısı ile bir WEB formuna sadece bir adet DropDownList ekledim ve bir adette işlevi olmayacak bir buton ekledim. Benim için önemli olan bu DropDownList kontolünü veritabanından veri çekerek nasıl doldurabilirim.

Şimdi işin kod tarafına gelelim öncelikle kodun tamamını veriyorum sonra açıklama kısmına geçiyorum..

Default.aspx.cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //SQLBağlantım için yeni bir connection nesnesi, sorgum için yeni bir sqlcommand nesnesi ve veri listeleme
            //için yeni bir SQLDatareader nesnesi oluşturdum. Sonra bağlantı ConfigurationManager kullanarak bağlantımı
            //sağlıyorum ve komut satırımı yazıyorum.
            SqlConnection conn;
            SqlCommand comm;
            SqlDataReader reader;
            string connectionString = ConfigurationManager.ConnectionStrings["NorthwndBaglanti"].ConnectionString;
            conn = new SqlConnection(connectionString);
            comm = new SqlCommand("SELECT ProductID,ProductName FROM Products", conn);

            try
            {
                //Bağlantımı açıyorum.
                conn.Open();
                reader = comm.ExecuteReader();
                //DropDownList için verilerimi yazıyorum. Databinding yapıyorum.
                DDLProduct.DataSource = reader;
                DDLProduct.DataValueField = "ProductID";
                DDLProduct.DataTextField = "ProductName";
                DDLProduct.DataBind();
                reader.Close();
            }
                //Hata olursa..
            catch
            {
                Response.Write("Bir hata oluştu");
            }
                //Bağlantımı kapatıyorum
            finally
            {
                conn.Close();
            }
        }
        
    }
}

Bu kodlarımı sayfalarıma yazdıktan sonra Northwnd veritabanından Product tablosundan bilgiler alınır ve DropDownList kontrolüm buna göre doldurulur. Şimdi bu kod bloğunda adım adım açıklama yapayım.

Farkedileceği üzere Page_load eventinde kodlarıma başlamadan önce bir if karar yapısı kullandım. Ve burada şunu diyorum :

if (!IsPostBack)

IsPostBack kullandım, yani eğer sayfa PostBack edilmemişse kodlarıma başla dedim. Peki ne demek bu?

Bir WEB sayfası için sunucuya bilgi gönderme ve sunucudan bilgi alma işlemi PostBack olarak bilinir. Örneğin bir WEB formunda bir butona basıldığında, server tarafında butonun click eventi oluşturulur ve server tarafından bir yanıt verilir, bu durum PostBack’tir.

Yani şöyle bir durum düşünün bu kodları çalıştırdığımda benim dropDownList kontrolüm veritabanından gelen bilgiler ile dolacak. Ben bu sayfayı tekrar çalıştırdığımda bu bilgiler ikinci defa yine dolacak. 10 defa çalıştırdığımda DropDownList kontrolüm 10 defa aynı bilgiler ile dolacak. İşte bunu önleyebilmek için ben en başta eğer sayfa ilk defa yükleniyorsa, daha önceden yüklenmedi ise bu kodları çalıştır diyebilmek için mevcut kodlarımı bir if karar yapısı içinde kullanıyor ve !IsPostBack (PostBack değilse) diyorum.

Tabi bunu burada kullanmam demek her DropDownList kontrolünün kullanımında IsPostBack kullanılır anlamına gelmemelidir. Biz DropDownList kontrolümüz için herhangi bir değişiklik meydana gelmeyeceğini bildiğimizden dolayı tekrar tekrar kullanılmasın diye kullandık. Örneğin şöyle bir senaryomuz olsun bir bilgisayar firmasının satmış olduğu ürünlerin markasını seçtikten sonra modellerin listelenmesi isteniyorsa burada bir değişim olacağından dolayı veritabanından veriler zaten yeniden yüklenmelidir.

Bu kısımdan sonra Sql bağlantımı sağladım. Bunun için ConfigurationManager sınıfını kullanarak bu bağlantı komutumu web.config dosyasından alıyorum. Dolayısı ile üstte System.Configuration namespace’ini ekledim. Daha sonra SqlCommand nesnesi oluşturdum ve comm adını verip ilgili SQL sorgu komutumu yani query’imi yazdım. Verilerimi listelemek için bir SqlDataReader nesnesi oluşturdum.

Daha sonra try bloğu altında SQL bağlantımı açtım, sql komutumu çalıştırdım ve sonra DropDownList kontrolüm için DataBinding işlemi yaptım.

 
reader = comm.ExecuteReader();
//DropDownList için verilerimi yazıyorum. Databinding yapıyorum.
DDLProduct.DataSource = reader;
DDLProduct.DataValueField = "ProductID";
DDLProduct.DataTextField = "ProductName";
DDLProduct.DataBind();
reader.Close();

Bu kısımdaki kod bloğunda görüldüğü üzere DropDownList kontrolünün DataValueField özelliği ile veritabanından çekmiş olduğum bilginin özellikle ID bilgilerini saklayabiliyorum. DataTextField ile de çekilen bilginin text özelliğini saklayabiliyorum. Buradan anlaşılacağı üzere DropDownList kontrolü veritabanı uygulamalarında çok çok yardımcı bir kontrolördür. Çünkü ID bilgisi saklaması ile birlikte bir çok işlemimi DropDownList kontrolü sayesinde gerçekleştirebilirim. Örneğin bir DropDownList kontrolünde bir ürünü seçip, seçilen ürüne uyan tüm modelleri listeleme işlemini sağlama imkanına sahip olabilirim.

3 yorum

  1. Harika bir paylaşım,çok teşekkürler..

  2. Güzel bir paylaşım işime yarandı şuan kullandım.. Peki dropdownlist e gelen 2 kayıttan birisi seçildiğinde yapılacak işlemi hangi komut ile sorgulayabilirim

  3. Hocam merhabalar,

    Öğrenci bilgileri projesiyle uğraşıyorum. Dropdownlistten öğrenci adını seçtikten sonra altındaki textboxların dolması gerekli. Ama işte 2 tane yeterli olmuyor.
    Ogrenci tablom
    ID
    AdıSoyadı
    Oku no
    Sınıf
    Tc
    Veli Adı
    Öğretime devam (bit)

    bana 4 textbox bir checkbox ın dolması gerekli bunu nasıl yapabilrim ?

    Teşekkürler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir