4 Ekim 2011 Salı

Devexpresste İç İçe Grid Oluşturma (Creating Inner Grid With Devexpress GridView)

         Merhaba arkadaşlar sıkça karşılaşılan devexpress sorunlarından biride iç içe grid yapısının oluşturulması. Devexpress GridView bizlere görünüm ve işlev açısından birçok kolaylıklar sağlıyor. Şimdi adım adım yapılması gereken işlemlere bakalım.
     Bunu bir örmek üzerinden anlatalım. Örneğimizde müşterimizin aldığı malzemeleri sergileyelim. Form üzerine grid yerleştirdiğimizde MainView kendiliğinden gelir. bizim yapmamız gereken create a new level seçeneğiyle yeni bir level eklemek. Daha sonra bu level de yeni bir GridView oluşturuyoruz. Oluşturduğumuz yeni View malzeme işlemlerini göstersin. Kolon yapılarını run designer seçeneğiyle herbir view için ayrı ayrı oluşturuyoruz. kolay anlatım olsun diye ben şekildeki kolonları oluşturdum. Aslında design kısmında yapmamız gerekenler sadece bu kadar gerisi kodla veritabanından gelen verilerin sadece doğru şekilde kümelenmesiyle alakalı.
    Design işleminden sonra grid içine yerleştirilecek veriler normal veritabanından verilerin alınması işleminden ibaret. Asıl yapılması gereken işlem verilerin tekbir veri kümesinde birleştirilmesi olayı (örnekte DsMaster). Daha sonra kümemizde toplanan veriler arasında bir master detail ilişki kurulması gerekmektedir. Bunun için kümemizde bir ilişki (relation) tanımlıyoruz. Tanımladığımız bu ilişkide hangi kolonların eşleştirilmesinin gerektiği belirtilmelidir. Örnek üzerinden gidecek olursak müşteri tablosundaki verilerle malzeme tablosundaki veriler IdMusteri kolonuna göre ilişkilendirilir. Oluşturulan ilişkiye bir isim verilir ve ana kume en son satırda yapıldığı gibi gridin datasource una atanır. Bu işlem benzer şekilde türetilerek iç içe istenildiği kadar grid yapısı oluşturulabilir. 

2 Ekim 2011 Pazar

SqlCommand


SqlCommand: Bir SQL sorgusunun yürütülmesi için kullanılır. Bu işlem 4 farklı metodla gerçekleştirilir.
ExecuteNonQuery: En çok kullanılan metodlardan biridir. Insert, Update ve Delete gibi geri dönüş değeri olmayan SQL sorgu cümlelerinin yürütülmesinde kullanılır.
ExecuteScalar: Geriye tek alanlı değer döndüren sorgularda kullanılır. Geri dönüş değeri olarak object tipinde bir nesne üretir.
Örneğin; “SELECT COUNT(kolon adi) FROM tablo adi” gibi sorgular.
SQL sorgularının nasıl olduğuna ve kullanımına ilerleyen derslerde değineceğim.
ExecuteReader: En yaygın kullanılan bir diğer metod. Tek alanlı verilerin ExecuteScalar ile alındığını belirtmiştik. Bu metod da ise sınırınız yok. Bu metodun geri dönüş değerini kullanmak için yalnızca SqlDataReader nesnesine ihtiyaç duyulmaktadır.

Basit bir ornekle ifade edecek olursak;
String connectionStr= Data Source=[Sunucu Adresi]; Initial Catalog=[Veri tabanı adı]; User ID=[Kullanıcı Adı]; Password=[Şifre];”;
SqlConnection connection= new SqlConnection();
connection.ConnectionString= connectionStr;
string commandStr=”SELECT kolon1,kolon2,… FROM tablo adi”;
SqlCommand command= new SqlCommand(commandStr,connection);
connection.Open();

SqlDataReader reader= command.ExecuteReader();
connection.Close();

ExecuteXmlReader: Veri tabanından çekilmiş XML formatındaki içeriği XmlReader nesnesine aktarır. Veriyi XML formatına dönüştürmek için SQL sorgusunda FOR XML kullanılır. XmlReader nesnesi System.Xml isim uzayı altında bulunur.

SqlConnection

Bu derste bazı veri tabanı erişim ve işlem nesnelerinin nasıl kullanıldığına değineceğim. Tabi işlemler sırasında kullanacağım veri tabanı SQL SERVER olacak.
SqlConnection: System.Data.SqlClient isim uzayı altında bulunan bu nesne Sql veri tabanı ile bağlantı kurulmasını sağlar. Bu nesnenin en çok kullanılan üyeleri ise;
ConnectionString: Veri tabanı ile bağlantı kurmak için gerekli olan bağlantı cümlesidir. En çok kullanılan bir takim bağlantı cümleleri şunlardır:
ü Data Source=[Sunucu Adresi]; Initial Catalog=[Veri tabanı adı]; User ID=[Kullanıcı Adı]; Password=[Şifre];
ü Data Source=[Sunucu Adresi]; Inital Catalog=[Veri Tabanı Adi]; Integrated Securty=SSPI;
ü Data Source=[IP],[PORT]; Network Library=DBMSSOCN; Inital Catalog=[Veri Tabanı Adi]; User ID=[Kullanıcı Adi]; Password=[Şifre];


Ip adresi üzerinden erişimlerde dikkat edilmesi gereken birkaç hususa da değinmek lazım. İlk olarak Sql Server’da Properties -> Security menüsünden Sql Server and Windows Authentication Mode seçeneğini seçmeliyiz. Ardından veri tabanına erisimine izin vereceğimiz bir kullanıcı oluşturmalıyız. Tabi bu kullanıcıya nasıl bir yetki verileceğine de karar verilmeli. Son olarak da Surface Area Configariton bölümünden Surface Area Configariton For Services and Connection kısmına girerek Remote Connections bölümünde Using Boot TCP/IP and Named Pipes seçeneğini seçerek isim ve ip numarası ile erişimi etkin hale getirmiş oluruz. Bu işlemlerden sonra SQL Server’i restart etmek gerekli tabi ki.


ConnectionTimeout: Veri tabanı ile bağlantı kurulurken hataya düşmeden önce ne kadar sure geçmesi gerektiği bu özellikle belirlenir.
Database: Bağlı olunan veri tabanının adını belirtir.
DataSource: Bağlı bulunulan sunucuyu bildirir.
State: Bağlantının durumunu belirtir.
Open: Veri tabanı ile bağlantıyı açar.
Close: Veri tabanı ile bağlantıyı kapar.

Devexpress te Dil Kütüphanesi Oluşturma (Creating Devexpress Language Library)

Devexpress kütüphanesini kullanarak kodlama ve design yapan developer ve designer arkadaşların yaygın olarak karşılaştıkları sorunların başında devexpress toollarının türkçeleştirilmesi gelmektedir.İlk yazımda bu konuya değineceğim ve elimden geldiğince devexpress ile ilgili yaygın karşılaşılan sorunları ve tooların kullanımını anlatacağım.
İlk olarak sorunun araştırılmasına yardımcı olmak için nerden başlanması gerektiğine değinelim. Araştırma yapmak isteyen arkadaşlar için yapamaları gereken localization işlemini devexpressin kod kütüphanesinde aratmak olacaktır.Bu sayede hangi tooların dil kütüphanesine müdahale edileceği ve nasıl yapılacağı konusunda yeterli bilgiye sahip olacaklardır. Fazla uzatmadan bir örnek üzerinden açıklayalım konumuzu. Extra Grid üzerinde Türkçe dil kütüphanesi oluşturalım. İlk olarak yapmamız gereken public class GridLibrary : DevExpress.XtraGrid.Localization.GridLocalizer şeklinde bir sınıf oluşturmaktır. Daha öncede bahsettiğimiz gibi temel başlığımız localization idi.Oluşturacağımız sınıfta GridLocalizer türünde olmalıdır.Şimdide sınıfın kalan kısmını verip açıklamaya devam edelim.

public class GridLibrary : GridLocalizer 

    public override string Language { get { return "Turkish"; } } 
    public override string GetLocalizedString(GridStringId id) 
    { 
      switch (id) 
      { 
      case GridStringId.MenuColumnBestFit: 
          return "Kolonu En İyi Boyuta Getir"; 
      case GridStringId.MenuColumnBestFitAllColumns: 
          return "Tüm Kolonları En İyi Boyuta Getir"; 
      } 
      return base.GetLocalizedString(id); 
    } 
}

Şimdide yazdığımız sınıfı açıklayalım. Öncelikle işleme dil kütüphanesinin türkçe olduğunu belirtmeliyiz daha sora yapmamız gereken GetLocalizedString fonksiyonunu override etmektir. GridStringId değeri türkçeleşebilen yani devexpress kod kütüphanesince değerine müdahale etmemize izin verilen değerleri içerir. Yazdığımız switch bloğu bu kodlara müdahale etmemizi sağlar. Sınıfımız bu kadarla bitiyor. Peki bu sınıfı yazmakla olay biticekmi? Elbetteki hayır. Neticede yazdığımız sınıfı geçerli dil kütüphanesinin olduğunu tanıtmamız gerekmektedir. Bu işlem için geçerli kod:
DevExpress.XtraGrid.Localization.GridLocalizer.Active = new GridLibrary();
Yukarıda belirttiğimiz kodun açılan ilk formun yapıcı metodunda InitializeComponent();  fonksiyonun hemen altına yazılması kafidir. Bu sayede programınızda kullanacağınız ExtraGrid öğeleri artık yazdığınız dil kütüphanesini runtime anında yansıtacaktır. Diğer kaynaklardan hangilerinin dil kütüphanelerine müdahale edileceğine bakmak için http://documentation.devexpress.com/#WindowsForms/CustomDocument1866 linkinden yardım alabilirsiniz.