logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 21 Şubat 2015 Cumartesi 09:39:24(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Bu makele için Bilgehan YILDIZ' a teşekkürler

Windows Applicationlarda sıkça görülen kullanımlardan biride Bir Gridde listelenen kayıtların üzerine çift tıklanınca başka bir form açılarak bu formda değişik işlemlerin yapılmasıdır

1-)En basit olarak formun içinden form açmak için kullanılan komut

Bir buttonun click eventinde KisiDetay bizim oluşturduğumuz başka bir formun adı

New anahtar sözcüğü ile yaratıp show komutu ile gösterilmesini sağlıyoruz.Ancak show komutu ile kisidetay formu açıkken bile ana formumuzda işlem yapabiliyoruz.Eğer böyle açtığımız ikinci form açık iken ana formda işlem yapılmasını istemiyor isek ShowDialog komutunu kullanmamız gerekiyor.


Kod:

    KisiDetay frm2 = new KisiDetay();
            frm2.Show();
//frm2.ShowDialog();



UserPostedImage

2-)Örneğin formun loadunda Kisi Tablomuzdaki tüm kayıtları dolduracak bir komut çalıssın .Ancak bir burda şunu istiyoruz datatable içinde Kişi Tablosunun primary key olan KisiID de bulunsun,çünkü diğer forma bu değeri göndererek işlem yapacağız ancak runtimedada bu alan son kullanıcıdan gizlensin.

dataGridView1.Columns["KisiID"].Visible = false;

bunun içinde gridviewimizin datasource atandıktan sonra hangi kolonu gizlemek istiyorsak yukarıdaki kod örneğindeki gibi o kolonu saklayabiliriz.Eğer design time de gride datasource bağlı ise bu işlemi gridin özelliklerinde koda gerek kalmadan yapabilirsiniz.

Kod:


            string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection(baglantiyolu);
            DataTable dt = new DataTable();
            string sorgu = "Select * from Kisi";
            SqlDataAdapter adap = new SqlDataAdapter(sorgu, conn);
            adap.Fill(dt);
            
            dataGridView1.DataSource = dt;

            dataGridView1.Columns["KisiID"].Visible = false;



3-)Şimdi gelelim ana senaryomuza,biz griddeki bir satıra çift tıkladığımızda o satırın idsini diğer bir forma göndererek detaylarını göstermek istiyoruz.

Bunun için öncelikle gridviewimizin propertylerinde şu değişiklikleri yapmamız gerekir

MultiSelectFalse böylece kullanıcı birden fazla satır seçemez
ReadOnlyTrue böylece bu senaryoya göre kullanıcı zaten gridde değişiklik yapmayacak
SelectionModeFullRowSelect böylece kullanıcı griddeki satırda nereye tıklarsa tıklasın bizim istediğimiz işlem yapılabilir.

4-)Açılacak yeni formumuzun ana formumuzdan gelen değeri almasını istiyoruz bunun için 2.formumuz constructorına(Türkçesi yapıcı metod olarak geçer) aşağıdaki gibi kodumuzu yazmamız lazım.KisiDetay constructoruna tanımlayacağımız parametreler diğer formlardan çağrılırken bizden istenecektir

Sınıfların biz tanımlanmasa bile yapıcı metodu(Constructor) bulunmaktadır. İşte bu metoda varsayılan metod(default constructor)denilmektedir.Yapıcı metodların özelliklerine gelince geriye değer döndürmez ve class(sınıf) ismiyle aynı isimde bulunurlar.


Kod:

    public partial class KisiDetay : Form
    {
        int KisiID;
        public KisiDetay(int _KisiID)
        {
            KisiID = _KisiID;
            InitializeComponent();
        }
    }



5-)Daha sonra Gridimizin CellContentClick eventine aşağıdaki kodu yazmamız gerekiyor

Kod:

KisiDetay frm2 = new KisiDetay(Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["KisiID"].Value.ToString()));
            frm2.ShowDialog();




Bu kod ile gridin seçili satırının KisiID değerini alarak yeni açacağımız forma parametre olarak göndermiş oluyoruz

6-)Artık KisiDetay formumuza kodları yazarak işlemlerimizi yapabiliriz.

Örnek formun loadında kişinin bilgilerini textlere dolsun.Burada zaten diğer formdan ID yolladığımız için geriye tek değer dönecektir.


Kod:

string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection(baglantiyolu);
            DataTable dt = new DataTable();
            string sorgu = "Select * from Kisi where KisiID=@KisiID";
            SqlParameter param = new SqlParameter("@KisiID", KisiID);
            SqlDataAdapter adap = new SqlDataAdapter(sorgu, conn);
            adap.SelectCommand.Parameters.Add(param);
            adap.Fill(dt);

            txtName.Text = dt.Rows[0]["Ad"].ToString();
            txtSoyad.Text = dt.Rows[0]["Soyad"].ToString();
            txtTcKimlik.Text = dt.Rows[0]["TCKimlik"].ToString();
            nudYas.Value = Convert.ToInt32(dt.Rows[0]["Yas"].ToString());

            if (dt.Rows[0]["Cinsiyet"].ToString() == "True")
            {
                rdbBay.Checked = true ;
            }
            else 
            {
                rdbBayan.Checked=true;
            }



UserPostedImage

7-)Son olarak da bu formda güncelleye basıldığında bu kaydın değerlerini güncelleyelim

Kod:

bool Cinsiyet;

            if (rdbBay.Checked)
                Cinsiyet = true;
            else
                Cinsiyet = false;

            string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;

            SqlConnection conn = new SqlConnection(baglantiyolu);

            string sorgukisiguncelle = "Update Kisi Set Ad=@Ad,Soyad=@Soyad,Cinsiyet=@Cinsiyet,Yas=@Yas,TcKimlik=@Tckimlik where KisiID=@KisiID";



            SqlParameter[] paramlist = new SqlParameter[6];

            paramlist[0] = new SqlParameter("@Ad", txtName.Text);
            paramlist[1] = new SqlParameter("@Soyad", txtSoyad.Text);
            paramlist[2] = new SqlParameter("@Cinsiyet", Cinsiyet);
            paramlist[3] = new SqlParameter("@Yas", nudYas.Value);
            paramlist[4] = new SqlParameter("@TcKimlik", txtTcKimlik.Text);
            paramlist[5] = new SqlParameter("@KisiID", KisiID);

            SqlCommand cmd = new SqlCommand(sorgukisiguncelle, conn);

            cmd.Parameters.AddRange(paramlist);


            conn.Open();

            cmd.ExecuteNonQuery();

            conn.Close();




8-)Tabi bu işlem başarılı olsa bi bu formu kapatıp alttaki forma tekrar geçtiğimizde grid ilk açıldığı haldeki değerlerinde kalacaktır.Bunun için en kolay yöntem bu forma bir yenile tuşu koyarak gridin değerlerini tekrar yüklemek olacaktır
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.