SENDE YAZ , FARKIN OLSUN...

9 Aralık 2010 Perşembe

Avea'dan Türkiye'de ve dünyada bir ilk: NFC teknolojili BonusluAvea

Dünyanın ilk telefon bağımsız, NFC teknolojisi ile çalışan temassız mobil ödeme çözümü BonusluAvea ile kullanıcılar, cüzdan taşımaya gerek duymadan
Bonuslu Avea
NFC SIM kartları içerisinde yer alan banka ve kredi kartlarını kullanarak hızlı ve temassız alışverişin ayrıcalığını yaşayacaklar. Avea Mobil Cüzdan içerisinde yer alan BonusluAvea servisinin lansmanını, dünyanın en büyük Uluslararası Kart Teknolojileri ve Uygulamaları Fuarı Cartes 2010 kapsamında yapıldı. BonusluAvea ile artık alışverişlerde kullanılan fiziki banka ve kredi kartlarını Avea Mobil Cüzdan içerisine taşıyor. Önümüzdeki dönemde ise Avea aboneleri Avea Mobil Cüzdan’ı; ulaşım, yemek, köprü ve otoyol geçişleri, stadyum ve bina girişleri gibi farklı alanlarda da kullanabiliyor olacaklar."

Avea Mobil Cüzdan

Peki nedir NFC teknolojisi?
NFC (Near Field Communication – Yakın Saha İletişimi) teknolojisi kısa mesafelerde cihazların birbirleri ile iletişim kurmalarına olanak sağlayan bir haberleşme teknolojisidir. Yakın mesafedeki (0-5 cm) elektronik cihazlar arasında çok kısa sürede (100 ms) iletişim kurarak güvenli bir temassız ara yüzden 424 kbps’e kadar hızlarda tüm dünyada boş olan 13.56 MHz frekansında çalışmaktadır. ISO 18092 ile standartlaştırılan NFC, mevcut temassız ödeme ve ISO 14443 standardına dayanan biletleme altyapılarıyla uyumludur. NFC, tipik olarak birkaç santimetre olan kısa bir çalışma kapsamına sahiptir ve radyo frekansı ile tanımlama (RFID) teknolojisi ve temassız akıllı kart altyapısıyla birlikte çalışır. NFC’ yi kullanırken, telefonunuz diğer cihazlarla iletişim kurabildiği gibi RFID servisi kısayol etiketlerinden küçük miktarlarda veriyi de okuyabilir. Bu yüzden, telefonunuzu bir RFID etiketine dokundurduğunuzda, etiketin içinde olan servis kısayolu başlatılır. RFID etiketlerini cüzdanınızda ya da cebinizde saklayabilir ya da posterlerin içine yerleştirebilirsiniz. Ayrıca NFC telefonunuzu kullanıp boş bir RFID etiketine veri koyarak kendi kişiselleştirilmiş hizmet kısayollarınızı oluşturabilirsiniz. NFC, kişiselleştirilmiş hizmet kısayollarınızı diğer NFC özelliğine sahip cihazlarla paylaşmanızı sağlar. Dahası, telefonunuzu bir NFC kredi kart okuyucusuna ya da bilet girişine dokundurarak işlem yapabilirsiniz. Kredi kartı, müşteri kartı ya da yolculuk bileti gibi ödeme bilgileriniz telefonunuzun içindeki entegre akıllı kartta güvenli bir biçimde saklanır.

Sizlerde bu yeni teknolojiyle tanışmak istiyorsanız www.bonusluavea.com adresini ziyaret ederek hemen başlayabilirsiniz.

Alıntı yaptığım yeri eklemeyi unutmuştum , özür dileyerek hemen belirtmek istiyorum.
Bu arada,teknoloji ve development üzerine ilgi duyan arkadaşlara, Cem Kefeli'nın sitesinide şiddetle tavsiye ediyorum.

Not:Üstteki makale , aşşağıda yer alan adresten alıntıdır!!!
http://www.cemkefeli.com/post/2010/12/07/Aveadan-Turkiyede-ve-dunyada-bir-ilk-NFC-teknolojili-BonusluAvea.aspx
Kaynaklar: Avea, Donanımhaber Forum, wikipedia, gelecekonline

Sende Yaz, Farkın Olsun!!!

6 Ağustos 2010 Cuma

JPA Mucizesi (Java Persistance API)




Evet , mucize diye başlık attım çünkü gerçekten mucizeler yaratıyor :) Kısaca bahsetmek istiyorum JPA'den.

Kimdir JPA,nedir,ne işe yarar , nerde kullanırız,kullandığımıza değermi?

Sırayla bu soruların tamamına cevap vermeye calısıcam ve fırsat bulursam kısa bi zaman içerisinde JPA yöntemiyle yapmıs oldugum basit bi örnek ve daha sonrada JPA le yaptıgım ve bi önceki makalemde bahsettiğim RMI yontemiyle ilişkilendirilmiş Server-Client Application bi örnek yazıcam.




O zaman sırayla baslıyalım soruları cevaplandırmaya.

Nedir bu JPA?
Java Persistence API; ilişkisel verilerin(Relational Data) , Java nesneleriyle nasıl ilişkilendirilieceği, bu nesnelerin ilişkisel veri tabanında(Relational DataBase) daha sonra erişilmeye elverişli şekilde nasıl tutulacağı ve kullanan uygulama sona erdikten sonra da varlığın devamlılığının nasıl sağlanacağı ile ilgilenir.Varlık kalıcılık modelinin(Entity Persistance Model) basitleştirilmesi yanında Java Persistence API
nesne ilişkisel eşlemeyi standartlaştırır. Daha genel bilgilerle açıklicak olursak , Farzedelimki bi projede mysql kullandınız daha sonra aynı projeyi mssql ' e taşımak istediniz.Yapmanız gereken iş çooook tabi JPA kullanmadıysanız.Eger JPA ile tasarlanmıs bi proje ise , JPA veri tabanıyla ilişki kurarken hangi veri tabanının driver'ını gösterdiyseniz onun la ilişkiye içerisinde oluyor ve verileri cok rahat bi şekilde veri tabanına işliyo.Çünkü JPA kendine has çok basit bi querylanguage kullanıyor yani select yapıcagınız zaman,kendiniz bi query olusturuyosunuz ve JPA nın formatında bi query oluyo , daha sonra alt tarafta hangi veri tabanını koyarsanız koyun , driverını JPA'a gösterdikten sonra sorun yok, o sizin yazdıgınız queryleri arka tarafta hangi veri tabanı varsa onun anlayacağı dile çeviriyor ve işleminizi yapıyor.Sakın demeyinki bide JPA query yazmayımı öğrenicez diye ,neredeyse bildigimiz query tamamen aynı sadece falzadan ":" karakteri falan var.Güya ayrı bi query language olusturduk hesabı.Şunu da belirtmeliyim ki bircok method zaten JPA de kullandıgımız Entity'mizin içinde tanımlı.Yani silmek(remove method) , eklemek(persist method) , bulmak(find method) , kendi içerisinde tanımlı.Ama query konusunda bagımsızlık olması gerektiğinden dolayı(çünkü cok specific bi query yazmak isteyebilirsiniz) size kendi query nizi olusturma imkanı veriyor ve onu alıp kullanacagı veri tabanının diline çeviriyor.Ne denebilirki.PERFECT! :)

JPA Ne işe yarar?

Ne işe yaramazki diyebiliriz aslında , çünkü bu daha çok sizin kullanım şeklinize baglı fakat örneklicek olursak yukardada yazdıgım üzere; projenizin altındaki database'i kaldırmak istediginiz de , sizi bütün kullandıgınız queryleri değiştirmek zorunda bırakmaz çünkü zaten siz projeyi JPA kullanarak yaptıysanız o zaten kendi dilini kullanmıstır ve veri tabanın değişmesi umrunda olmaz , driver'ını gösterirsiniz o bütün queryleri kendisi o veri tabanının diline çevirir.

JPA Nerelerde Kullanılır?
Valla şöyle bi düşününce aslında kullanmak çok mantıklı gözüküyor.Özellikle cok fazla sorgulama(query) içeren uygulamalarda verimli bi şekilde kullanılabilir.

JPA Kullandığımıza değermi?

Dogrusunu söylemek gerekirse , bu soruyu soran kişiler için sölüyorum , demek ki şu ana kadar herhangi bi proje'yi farklı bi veri tabanına taşımayı denemişler yada taşımışlar ama hiç üşenmemişler.Kısaca "Tabiki DEĞER..."
Fırsat buldugum en kısa zamanda örneklendiricem.Umarım ufkunuzu açmıştır ve faydalı olmustur.Sende Yaz , Farkın Olsun!!!

29 Temmuz 2010 Perşembe

Java ' da RMI (Remote Method Invocation)



Selamlar ,artık mümkün oldugunca Java üzerine de bişeyler yazmaya çalışıcam.Günümüzde Mesajlajma ve msn tarzı sohbet programlarının kullanımı cok yaygın oldugundan bu olayın temeliyle ilgili bi konudan bahsetmek istedim.Öncelikle RMI kısaltmasının Türkçe açılımı "Uzaktan Metod Çağırımı" demektir.Adından da anlaşılacağı üzere , iki ayrı objenin bir interface ( Arayüz ) aracılığıyla , birbirleri arasında server - client (sunucu - istemci) ilişkisi oluşturmada kullanılan bir yöntemdir.Daha genel olarak yazıcak olursak ; Bir cihaz üzerinde çalışan Java nesnelerinin, başka bir cihaz üzerinde çalışan diğer Java nesnesinin metodunu çağırmasını sağlar. Bu önemli özellik dağıtık uygulamalar geliştirilmesine izin verir.

Genel şablon şu şekildedir :




Çok basit bir RMI örneğini resimlli ve açıklamalı olarak paylaşmak istedim.

İlk olarak oluşturmamız gereken nesnelerimizi belirliyelim;

1)Server (Sunucu) görevi yapan objemiz;
2)Client (İstemci) görevi yapan objemiz;
3)Her iki taraf tarafından da kullanılabilen bir Interface (Arayüz);
4)ve bu interface' i (Arayüz) implment edicek olan objemiz.

İstersek arada baglantı saglicak olan interface'imizi implement etmek için ayrı bir nesne

oluşturmayıp diğer nesnemiz içinde de implement edebilirdik fakat kodun anlasılması

acısından ve temizliği acısından bu sekilde yazılması daha faydalı olucaktır.

Gelelim program tarafına ;

1.Kısım'da Server isimli class'ımızı yazalım ;

import java.rmi.registry.Registry;//Registry' mizi oluşturmak ve

import java.rmi.registry.LocateRegistry;//yerleştirmek için paketlerimizi dahil ettik

//Ben isim olarak ServerClass dedim;

public class ServerClass {

public ServerClass() {


try {//Try catch kullanımına kendimizi alıştırmamız lazım ki ne gibi hatalar aldıgımızı //görelim

Registry myregistry=LocateRegistry.createRegistry(1099);//Öncelikle kendimize Default olan

//1099 portunu ayırdık

myregistry=LocateRegistry.getRegistry();//Ve bu portu aldık.

myregistry.rebind("MesajServisi",new ImplementSender());//Bind(Baglamak) kelimesinden

//de anlaşıldığı gibi , MesajServisi ismini verdiğimiz sunucuya,interface'mizi implement eden

ImplementSender isimli nesneyle geçiş yapacagımızı belirttik.

System.out.println("Server is Working...");//Ve Server'ın Çalıştıgı uyarısı için bir output aldık.

} catch (Exception e) {//Try'ın içerisindeki olası bir Exception(İstisna) durumunda 'e' içerisine //gömülü hatayı getiricek.

System.out.println("Registry Olusturulan Kısımda Hata: "+e);//Hata Output'unu vericek
}
}

public static void main(String [] args) {


new ServerClass();//Ve burda objemizin bir instance(Örneğini) olusturarak server'ı calıstırdık.
}
}


2.Kısım'a gelicek olursak Client nesnesini oluşturucaz ;

//Her zamanki gibi , ilk olarak kullanacagımız tanımlı objeleri ve

// methodları barındıran paketlerimizi dahil ettik.

import javax.swing.*;

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.net.MalformedURLException;

import java.rmi.NotBoundException;

//Ben isim olarak ClientClass dedim;

public class ClientClass//Direk olarak main method içerisinde interfaceimizin bir instance'ını
//oluşturduk ve Naming.lookup yaparak , yazdıgımız url'nin referansını döndürmesini sagladık
{

public static void main(String [] args)
{

try
{
SenderInterface senderinterface=(SenderInterface)Naming.lookup("rmi://127.0.0.1

/MessageService");//127.0.0.1 yerine localhost'da yazabilirdik,zaten o anlama geliyor.

//Cunku suan local de calıstırıyoruzki,mesajlaşmamızı görebilelim.

for(int i=0;i<6;i++)
{
//Burda ben sonlandırmak için kısa bi döngü olusturdum;

//Bunu siz istediginiz takdirde kullanıcılar cıkıs yapana kadar uzatabilirsiniz.Suan 6 kere

//mesajlaşıcaklar

StringFirstMessage=senderinterface.getData(JOptionPane.showInputDialog("Gonderilmek

İstenen Mesaj:\nKullanıcı 1 Mesaj Alanı:\n")); //1 nolu kullanıcının mesajı String

SecondMessage=senderinterface.getData(JOptionPane.showInputDialog("Gonderilmek

İstenen Mesaj:\nKullanıcı 2 Mesaj Alanı:\n"));//2 nolu kullanıcının mesajı
}
}

// import java.rmi.RemoteException;

// import java.net.MalformedURLException;

//import java.rmi.NotBoundException;

// Bize uyarı vermeleri için dahil ettiğimiz bu paketlerin sonunda Exception yazması demek;

//oluşacak Exception'ın kullanıcıya throw edilmesi (fırlatılması ) demek.Buyüzden hepsi

//için ayrı ayrı cacth yazmak zorundayız.

catch (RemoteException RMTException)
{
System.out.println("RemoteException Hatası: "+RMTException);
}
catch (MalformedURLException Murle
)
{ System.out.println("Malformed URL Exception Hatası : "+Murle);
}
catch (NotBoundException NotBound)
{
System.out.println("NotBoundException Hatası: "+NotBound);
}
}
}

Ve şimdide gelelim 3.Kısım'a: Interfacemizi oluşturalım ;

import java.rmi.*; //Ben isim olarak SenderInterface dedim;

public interface SenderInterface extends Remote{ //Remote method olmasından dolayı

//Java'da tanımlı Remote Class'ına extends olması (Yayılması) lazım.

public String getData(String text) throws RemoteException; //Burda ise her iki tarafından

//da kullanacagı methodu yazıyoruz fakat method'un içeriğini , Implement ettiğimiz yerde ,

//yani ImplementSender class'ımızda(Sabit bir isim değildir,kendi verdiğim isimdir)

//tanımlayacagız.Bir diğer nokta ise,görüldüğü gibi bu method da RemoteException içeriyor

//ve bu da methodu kullanacagımız yerde try catch yazmalıyız anlamına geliyor , ki

//herhangi bir exception durumunda bize exception bildirebilsin. İsterseniz throw etmesini

//istemiyorum ,bana bi exception bildirmesin diyebilirsiniz tabiki , ama yazarken

//karsılasılacak hataların cabuk cozulebilmesi acısından şart;
}

Ve son kısım 4.Kısım' da ise oluşturdugumuz Interface'i implement edicek Class'ı yazıyoruz;

import java.rmi.RemoteException;//Yine Exceptionlarımız var import

java.rmi.server.UnicastRemoteObject;//Bu sebepten catch kullanmayı //unutmayalım.

public class ImplementSender extends UnicastRemoteObject implements SenderInterface
{
//UnicastRemoteObjesinin , java içerisinde tanımlı olan constructor'ını kullanacagız ve bu

//yuzden extdends UnicastRemoteObject yazdık ve yazdığımız Interface'i implement

//edebilmesi içinde sonuna Implements keyword'unu yazıp yanına implement edeceği

//interface'in adını yazdık.

static int cnt=1;//Static olarak tanımlamamın sebebi , her

//initialize edildiğinde 1'e eşitlenmesini istemememin sebebi,1 iken 1.kullanıcı yazıcak ,

// 2 iken 2. kullanıcı yazıcak.Bu ornek kod oldugu için o kısımlar istendiği gibi değiştirilebilir

public ImplementSender() throws RemoteException
{
super();//UnicastRemoteObject isimli sistemde tanımlı olan objenin constructor'ını

//çağırdık.
}
public String getData(String text) throws RemoteException
{
//Az önce Interface'in içerisinde boş bıraktığımız methodumuzu işte tam burda //tanımlıyoruz. Amacımız yollanan mesajın interface methodu ile alınıp, daha sonra diğer // objenin bu methodu cagırmasıyla içerisinde tasıdıgı string'i return ettirip diger objeye //tasımak.

if(cnt==0) { System.out.println("1. Kullanıcıdan Mesaj Geldi : ===>"+text);
cnt++;
return text;
}
System.out.println("2.Kullanıcıdan Mesaj Geldi : ===>"+text);
cnt--;
return text;
}
}
Programımızın Çalıştırılmasına gelince , doğal olarak ilk önce Server'ımızı yani ServerClass'ımızı çalıştırıyoruz ve daha sonra ise ClientClass'ımızı çalıştırıyoruz.Ve karşımıza direk yollayacagımız metni isteyen kutu cıkıyor.

Alttaki Screen Shotlardan programın Çalışırken ki görüntüsüne bakabilirsiniz.



Ve işte Bu kadaaaaaar :) Bazı yerleri biraz fazla detaylı anlatmamın sebebi , daha alt seviyedeki
arkadaşların baktığı zaman "Burayı niye yazdık?" dememesi içindir.








Kodun Direk Olarak Çalıştırılabilir halini yorumsuz olarak alt kısıma koyuyorum.
Bu programın kodlarını yazarken IDE olarak Eclipse tercih edilmiştir.


import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;


public class ServerClass {

public ServerClass() {


try {

Registry myregistry=LocateRegistry.createRegistry(1099);
myregistry=LocateRegistry.getRegistry();
myregistry.rebind("MessageService",new ImplementSender());
System.out.println("Server is Working...");

} catch (Exception e) {

System.out.println("Registry Olusturulan Kısımda Hata: "+e);
}
}

public static void main(String [] args) {


new ServerClass();
}
}


import javax.swing.*;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;


public class ClientClass
{

public static void main(String [] args)
{

try
{
SenderInterface senderinterface=(SenderInterface)Naming.lookup("rmi://127.0.0.1/MessageService");
for(int i=0;i<6;i++)
{
String FirstMessage=senderinterface.getData(JOptionPane.showInputDialog("Gonderilmek İstenen Mesaj:\nKullanıcı 1 Mesaj Alanı:\n"));
String SecondMessage=senderinterface.getData(JOptionPane.showInputDialog("Gonderilmek İstenen Mesaj:\nKullanıcı 2 Mesaj Alanı:\n"));
}
}
catch (RemoteException RMTException)
{
System.out.println("RemoteException Hatası: "+RMTException);
}
catch (MalformedURLException Murle)
{
System.out.println("Malformed URL Exception Hatası : "+Murle);
}
catch (NotBoundException NotBound) {
// TODO: handle exception
System.out.println("NotBoundException Hatası: "+NotBound);
}


}




}



import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;


public class ImplementSender extends UnicastRemoteObject implements SenderInterface {

static int cnt=1;
public ImplementSender() throws RemoteException{
// TODO Auto-generated constructor stub
super();
}
public String getData(String text) throws RemoteException{
if(cnt==1)
{
System.out.println("1. Kullanıcıdan Mesaj Geldi : ===>"+text);
cnt++;
return text;
}
System.out.println("2.Kullanıcıdan Mesaj Geldi : ===>"+text);
cnt--;
return text;
}

}

import java.rmi.*;



public interface SenderInterface extends Remote{

public String getData(String text) throws RemoteException;

}

Umarım faydalı bir makale olmustur.Daha sonra görüşmek üzere.
Sende Yaz , Farkın Olsun!!!

26 Mayıs 2010 Çarşamba

SqlDataReader Kullanımı



Selamlar ;
Bazen tabloları hazır bir şekilde veri tabanından alıp , olduğu gibi DataGridView içerisine yerleştirmeye çalışırız , bu tip işlemleri SqlDataAdapter ve DataSet kullanarak çok rahat birşekilde gerçekleştirebiliriz.Ama bu yöntemle , doldurduğumuz DataGridView Kolonları(dikey) veri tabanındaki tuple (Aynı Türden Veriler Demeti) isimleriyle Data Grid'e yerleşirler , yada bazen bütün tuple ları DataGridView e eklemek istemeyiz , sadece bazılarını göstermek isteriz.Bunları aynı mantıkla yapmak mümkün fakat SqlDataReader bu konuda büyük rahatlık sağlıyor.SqlDataReader while döngüsü kullanılarak içerisinde tuple ları tek tek çektiği için , ayrı ayrı yerleştirme imkânı da sağlamış oluyor.Yani 3.kolondaki verilerle 7.kolondaki verilerin yerini çok rahat değiştirebilirsiniz.Sadece DataGridView kullanımında değil tabiki , her türlü veri çekme işleminde çok kolay bir şekilde SqlDataReader kullanabiliriz.Mesela bir combobox 'u , veri tabanından çekeceğim illerin ismiyle doldurmak istedim diyelim.Hemen Reader kullanımını burda kısaca 2 -3 satır göstericem fakat alt tarafda resmi yerleştirdim , oraya tıklayarak Kodları inceleyebilirsiniz.
Örnek:
Tabiki öncelikle SqlConnection oluşturuyoruz
SqlConnection baglantim = new SqlConnection("Data Source=Bilgisayarınızınadı;Initial Catalog=DataBaseAdı;Integrated Security=True");
daha sonra bu baglantıyı açmamız gerek;
baglantim.open();
şimdi de veri tabanına ne yapmak istediğimizi belirticek olan SqlCommand satırını yazalım;
SqlCommand cmd=new SqlCommand("select * from iller",baglantim);

Sonrasında myreader isimli SqlDataReader oluşturuyoruz;
SqlDataReader myreader;
Query imizi içine yazıp yada üst te bir string içerisine yazıp SqlCommand içerisinde o stringi yazıp , cmd.ExecuteNonQuery(); şeklinde çalıştırabiliriz; fakat bu noktada
değişen bir şey var.Direk olarak Query mizi çalıştırmak yerine , myreader isminde oluşturduğumuz SqlDataReader objemize atıyoruz.Yani myreader=cmd.ExecuteReader(); diyoruz.
Daha sonra while(myreader.Read()) şeklinde bir döngü oluşturuyoruz.Yani myreader isimli objemiz , veriler bitene kadar tek tek verileri alıcak.
Bu döngü içerisinde , her seferinde gelen verileri ne yapacagımızı yazıyoruz.Mesela comboBox ımıza veri tabanımızda kayıtlı olan illerimizi yerleştirelim.

while( myreader.Read() )//bitene kadar okuyacak
{
comboBox1.Items.Add(myreader.GetValue(0).ToString());
}



İllerimizi combobox ımıza yerleştirmiş olduk.Yukarıda SqlDataReader'ın degerlerini GetValue fonksiyonu ile aldık.Dikkat ettiyseniz myreader.GetValue(0).ToString() yazdık.Yani iller isimli tablodaki ilk tuple ı aldık.Varsayalım ki ,veri tabanımızda öğrenciler isimli bir tablomuz var.Tablomuzda isim,soyisim,yas,cinsiyet olsun.Biz sadece Soyisim ve yaşı almak istiyoruz; o zaman myreader.GetValue(1) diyerek soyismi, myreader.GetValue(2) diyerek yaşı çekebiliriz.Daha sonra bu aldığımız değerleri while döngüsü içerisinde DataGridView ' e
dataGridView1.Rows.Add(myreader.GetValue(1).ToString(),myreader.GetValue(2).ToString());
diyerek DataGridView ' e sadece Soyisim ve Yaşı eklemiş olduk.


Alt kısımda ki resime tıklayarak , comboBox için kodların Visual Studio üzerinde ki görünümünü büyütebilirsiniz.Bu kodları aynı mantıkla DataGridView kullanımı yada kendi isteğinize göre de modifiye edebilirsiniz.



Umarım Yardımcı Olmuştur. Sende Yaz , Farkın Olsun...

25 Mayıs 2010 Salı

Tek Bir Fonksiyonla Bütün TextBox ları Temizlemek


Selamlar,Bazen yazdığımız programlarda o kadar çok TextBox oluyor ki,"temizle" butonunu oluşturmaya korkuyor insan.Ama korkmayın:)Yazacağımız küçük bir fonksiyonla bu dertten kurtuluyoruz.


Nasıl mı? Şu şekilde ;
TextBox larımızın bulunduğu forma çift tıklayalım(Yada Solution Explorer'dan sağ Tıklayıp View Code da diyebilirsiniz).


Formun kod kısmına girmiş bulunduk.Burada fonksiyonumuzu oluşturalım.


Buyrun Altta Direk Kopyalanıp Kullanılabilir Halini Veriyorum...


private void temizle()
{

foreach (Control c in Controls)
{

if (c is TextBox)
if (c.Text != "")
c.Text ="";
}
}

Fonksiyonumuzu oluşturduktan sonra , hangi buton tıklandığında çalışacak ise o butonun Click_Event kısmında çağırıyoruz.

private void button1_Click(object sender, EventArgs e)
{
temizle();
}

Daha net anlaşılması açısından alttaki yorumlanmış halinede bakabilirsiniz.

private void temizle() // Temizleme Fonksiyonumuz

{
foreach (Control c in Controls)//control tipinde c diye bir değişken oluşturduk ve foreach ile tek tek formumuzdaki bileşenleri çekiyoruz

{
if (c is TextBox)//if içerisinde gelen parametre bir textbox mı diye kontrol ediyoruz , TextBox ise İçerdeki "if" yapısına giriyoruz
if (c.Text != "")//Eğer gelen Textbox boş değil ise
c.Text ="";//Gelen TextBox'un textini boş yaptık...
}

}
private void button1_Click(object sender, EventArgs e)

{
temizle();//Butonumuza Tıkladığımız anda bu fonksiyon çalıştırılacak.
}

Bu kodu ComboBox , CheckBox , vs. olarak modifiye edebilirsiniz.Kendinize Göre Uyarlayıp Şekillendirebilirsiniz.
İşte Bu Kadar Basit :)
Umarım Faydalı Olmuştur.Sende Yaz , Farkın Olsun!!!

Can Güldoğan'dan DataGridView Kullanımı




Öncelikle Sevgili Kardeşimin Blog Adresini Eklemek İstedim...Oradan Da Detaylı Bilgi Alabilirsiniz.
http://devexper.blogspot.com

Datagridview Kullanımı
Daha önceki yazımda database'i projemize ekledik.. Şimdi bir form application da database'imizdeki verileri nasıl çekeceğiz ve kullanıcıya göstereceğiz onu anlatacağım..

Tabi öncelikle biraz basitçe bazı ön şeyler anlatacağım (profesyöneller kızacak )

1- Öncelikle bir sql server a bağlantı yapmamız lazım..
2- Bağlantı yaptıktan sonra bir ADAPTOR oluşturmamız lazım..
3- Bir DATA SET oluşturmamız lazım ( ki bu DATASET'ı gridview değerleri göstermek için kullanıyor yani geçici bir yazboz tahtası olarak düşünelim)
4- ADAPTOR'umuz DATASET'imizin içini dolduran tek araç (Yani bu yazboz tahtasını adaptör kullanıyor birtek). Bu araç data setimizi doldursun..
5- DATAGRIDVIEW 'ımızda bu ADAPTORUN yazdığı DATASET'ın içindekileri bize göstersin..

Şimdi ben size öncelikle ilgili c# kodunu veriyorum..



string sql = "select * from student"; // tipik bir sql komutu

SqlConnection connection = new SqlConnection("Data Source=sunucu_adı;Initial Catalog=database_adi;Integrated Security=True"); // Bağlantı Connection String ile yapıldı
connection.Open();

SqlDataAdapter adaptor= new SqlDataAdapter(sql, connection);
// adaptor oluşturduk ve içine sql ile connection nesnelerini attık..
DataSet can = new DataSet();
// can diye bir data set oluşturdum
adaptor.Fill(can, "xx");
//adaptor can data setinin için sql sorgumuzun cevabı ile doldurdu ve xx diye bir tabloya attı
dataGridView1.DataSource = can.Tables[0];
// data gridview1 imizin data soruce u can datasetimizin ilk tablosu olsun dedik..
connection.Close();
// bağlantımızı sonlandırdık..

Yukarıdaki kodu kısaca size açıkladım.. Açıkçası burada yazmak bek kolay olmuyor..
Şimdi bir windows application oluşturup bu kodu deneyelim..

Öncelikle bir buton ve data gridview ekleyelim




Amacımız butona basınca sql sorgumuzun çalışması... Şimdi button1 e tıklayıp kodumuzu ekleyelim..




Eklediğimiz kod yukarıdakinin aynısı ama bir tek fark var
sunucu adınız ve data base adınız farlı olabilir
ben sunucu olarak localhost yazdım ve data base'imde school sizin kiler farklı olabilir..
Artı bu şekilde data base'e erişmek istiyorsanız ( Ki ben bir çok program yazdım bu şekilde birçok değeri rahatlıkla işleye biliyorum.. Neyse Konu yb değil )

using System.Data.SqlClient;

satırını başa eklemeyi unutmayın (ki resimde altını kırmızı çizdim)

neyse efendim tüm bunları yaptıktan sonra programı run yapalım



form önce bu şekilde görünüyor..
Biz kodumuzu butona tıklanınca değişiklik olsun diye yazdık..
Butona tıklayınca aşağıdaki sonucu almanız içten bile değil :))



İlerleyen günlerde datagridview hakkında daha ileri seviye şeyler anlatacağım..
Tavsiyem internetteki videoları da izlemeniz.
Çokta sıfıra inerek anlatmıyorum biliyorum ama blogger ortamında yazı yayınlamak hemde istediğiniz gibi yayınlamak pekte kolay değil açıkçası..
Biraz birşeyler bilen arkadaşlar için çok kolay gelecek bu yazılar.. Ama sıfır bilen arkadaşlar kendilerini epeybir geliştirmek zorundalar.. Çünkü hiç visual c# bilmeyen arkadaşlar değilde bilipte bu konularda eksikliği olan projesi olan arkadaşları hedefleyip onlara göre yazıyorum..

İyi Çalışmalar..