formlar arası veri transferi

Başlatan baran123, 22 Haziran 2014, 16:29:23

baran123

Merhaba bir veritabanı projesi yapıyorum bir yerde takıldım güncelleme işlemi için şöyle düşündüm, datagried de satırı secerim sonra güncelle butonuna basarım yeni form acılır orada textboxlara bilgiler dolar bende değiştirip kaydederim fakat secili olan satırdakı bılgılerı dıger forma nasıl aktarırım ?

sigmoid

#1
Form içerisinde public değişkenler oluşturup formlar arası veri gönderebilirsin.
Örneğin Form2 için

public partial class  Form2: Form
    public int sayi;
    public string mesaj;

şeklinde değişkenle oluştur. Form1 içindeki  buton1 içinde çağırıken form1 den form2 ye veri gönderirken

private void Buton1_Click

Form2 frmForm2=new Form2();
frmForm2.sayi=123;
frmForm2.mesaj="Selam";   //şeklinde form2 ye veri gönderebiliyorsun.
if(frmForm2.ShowDialog()==DialogResult.OK)  ile çalıştır.
{
   //form içerisinde tamam, kaydet gibi butonlara basılınca gerekli işleri yap.
   //formdan değer okumakta aynı mantık
   int yenisayi=frmForm2.sayi;
   
} //Eğer formun kapat, iptal vs butonuna basıldıysabu if yapısı içine hiç girilmeyecek

Form2 içerisinde ekleyeceğin Kaydet, İptal, Kapat gibi butonlara DialogResult değeri ekleyebilirsin. Kapat butonına DialogResult olarak Cancel ekleyince içine herhangi bir kod yazman gerekmez. Tamam butonunun Dialog result değerine OK veriyorum. Formu kapatmak için me.hide() gibi herhangi bir kod yazılmaz. Tamam butonuna basınca yapılması gerekli işleri yazınız, fonksiyon sonunda form otomatik kapanıyor. Eğer kapanmasını istemiyorsanız kodun içine this.DialogResult = DialogResult.None; yazmanız yeterli.

kolay gelsin.

muhittin_kaplan

#2
ama yöntemin yanlış..

genelde uygulanan şudur, aynı formda altta grid ve tüm kayırlar, yukarda textler ve ilk kayıt.
sen gridden seçim yaptığında yukardaki textte seçili kayıtın bilgileri..
ileri geri update,delete ve bu butonlar...

mesaj birleştirme:: 22 Haziran 2014, 16:52:26


barisertekin

#3
Yöntemi yanlış değil. Öyle de olur öyle de olur. İşlemleri yeni formda yapmak istiyorsa yeni formda yapsın. Yanlış olan şu. Seçilen kayıttaki bilgileri göndermek istiyor. Bilgiler değil sadece kaydın ID'si gönderilir. Açılan pencerede o ID'ye göre veriler tekrar çekilerek textbox'lar doldurulur.

Açılacak form ismi = frmUye olsun.
frmUye formunda public int UyeID; şeklinde global bir değişken tanımlamalısın.

Ana formdan açarken ise;

frmUye uye = new frmUye();
uye.UyeID = SecilenKaydinID'si;
uye.ShowDialog();


Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

baran123

Yorumlar için teşekkürler ama kapsülleme ile yapmam gerekiyormuş bunu nasıl yapabilirim ?

barisertekin

#6
Nesne tabanlı programlamanın temellerini inheritance,encapsulation(kapsülleme) ve polymorphism oluşturur. Bu temel 3 kavramı iyi öğrenmelisiniz. Yine de sizin sorununuzun çözümü için gerekli değildir. Alt tarafı bir ID göndereceğiz. İlla ki olsun der isek;

private int _ID;
public int ID
{
set { _ID= value; }
get { return _ID; }
}

Şimdi bu kod ne yapıyor sorusunun cevabı. Ana formdan public olarak tanımlanan ID değişkenine kaydın ID'si atanıyor. Ama Açılan formda bu _ID = ID denilerek private olarak tanımlanmış dışarıdan erişilemeyen _ID değişkenine dolaylı yoldan atama yapılmış oluyor. İşte bu olaya kapsülleme diyoruz.

Okumak isterseniz, bkz. http://www.gorselprogramlama.com/kapsulleme-encapsulation-c-net/

baran123

Siz harikasınız tam aradığım şeydi nokta atışı teşekkürler :)