24 Mart 2019 Pazar

Limnor Veritaban Programlamaya Giriş - 2

Limnor Veritaban Programlamaya Giriş - 2


EasyGrid Kullanarak Veri Girişi Yapmak


EasyGrid'i Kaydedebilir Yapmak


EasyGrid nesnesi veritabanına kolayca veri girebilecek şekilde ayarlanabilir. Yeni bir proje başlatıp formun üzerine bir EasyGrid nesnesi ekleyelim ve veritabanı ile tablo bağlantısını yapalım.


ForReadOnly özelliğini FALSE yapalım.


AutoSave özelliğini yapacağımız işe göre seçeriz. Bu özellik TRUE değeri olursa form kapatılırken yapılmış olan tüm değişiklikler veritabanına kaydedilir. Eğer FALSE olursa değişiklikleri kaydetmek için üzerinde Save yazan bir buton eklemeli ve bununla UpdateData metodu çağırılmalıdır. UpdateData metodu çalışırken grid sağ üst köşesinde beliren yardımcı buton ile de çağırılabilir. 








Sorguyu Daha Açıklayıcı Bilgi İçin Değiştirmek


Hangi TeacherID değeri hangi öğretmene ait hatırlaması zor bunun yerine Teacher tablosundan FirstName ve LastName sütunlarını da sorgumuza dahil edelim. Teacher tablosundan FirstName sütununu çift tıklayıp sorguya ekleyelim.


FirstName sütunu şu andaki sorguda bulunan tabloda olmadığı için bize tabloların hangi sütunlar üzerinden bağlanacağını soran diyalog açılacaktır. Burada her iki tablodan da TeacherID sütunlarını seçelim.


Burada dikkat ettiyseniz daha önce yaptığımızdan farklı olarak bağlama tipinde ikinci seçeneği seçtik. Sebebi şu , biz Class tablosunda TeacherID sütununu boş bırakılabilir olarak tasarladık yani o dersle ilgili bir öğretmen henüz tanımlanmamış olabilir. Eğer birinci seçeneği seçersek her iki tabloda birbirinin karşılığı olan kayıtlar gelecek ama Class tablosunda TeacherID'si boş bırakılan kayıtlar gelmeyecekti. Halbuki biz Class tablosundan tüm kayıtları görmek istiyoruz, sadece öğretmen eğer atanmışsa onu da adı ve soyadı şeklinde görmek için bu birleşik sorguyu yapıyoruz.

LastName sütununu da sorgumuza ekledikten sonra şu şekle gelir.


Oh ne güzel , ama bize yetmedi. SQL sorgusuna manual müdahale ederek öğretmenin adı , bir boşluk , soyadı şeklinde tek sütunda göstereceğiz. Bu amaçla Show SQL butonuna basıp şu değişikliği yapalım. 


Çok kod yazdık yorulduk! Bi ayran içelim..






ID Sütunlarının Gizlenmesi


Şimdi bu ClassID ve TeacherID sütunları bizim girebileceğimiz değerler değil ve ayrıca biz bunların anlamlarını da aklımızda tutamayız çünkü bunlar veritabanı tarafından otomatik verilen sayılar. Ama bir yandan da veriler düzenlenirken bu ID bilgileri olmadan düzenleme olamaz çünkü bunlar tabloların Primary Key'leri. Napacaz? Bu sütunlar okunacak ama kullanıcıya gösterilmeyecek. Bu amaçla EasyDataSet elemanının Columns özelliğini kullanıyoruz.

Karşımıza gridde bulunan kolonların bir listesi çıkacaktır.


Burada Edit Column Attributes butonuna basınca karşımıza sütunları düzenleme penceresi çıkar. Burada her sütunla ilgili birçok özellik değişebilir. Burada ClassID ve TeacherID sütunlarının Visible özelliklerini FALSE yapalım.


Bunu yapıp Tamam butonu bastığımızda .NET'in gıcık bir özelliği ile karşılaşacağız. Tabloda eğer sütun Primary Key ise bu sütun Visible özelliği FALSE yapılamıyor ve görünmez olmuyor. Ama demokrasilerde çare tükenmez biz de sütun genişliğine çok küçük bir değer veririz bir çizgi olarak kalır orada.




Verilerin Görünüşünü Ayarlamak


Columns özelliği içinde grid sütunları hakkında birçok özellik değiştirilebilir. Bunlarla oynayarak verilerin görünümünü isteğinize göre değiştirebilirsiniz. 

Başka mesela gridin AutoSizeColumnMode özelliği ile grid sütun genişliklerini çeşitli şekillerde otomatik ayarlanmasını sağlayabilirsiniz.


None olarak bırakırsanız sütun özelliği ne ayarlıysa sabit kalır.


AutoSizeColumnMode değerini Fill seçersek bu sefer sütun genişlikleri grid genişliğine göre kendini ayarlıyacaktır.









Sütun Düzenleyicilerin Kullanılması


Her sütuna ait FieldEditors özelliğinde her sütun için girilecek veriye uygun bir düzenleyici seçerek girilen verinin daha sağlıklı olmasını sağlayabiliriz. FieldEditors listesini açtığımızda farklı düzenleyiciler liste halinde gelir.

DateSelector :


Bu DateTime tipi veriler için kullanılır ve tarihi ve zamanı girebileceğimiz bir diyalog gösterir.


RegisterDate sütunu için Date Selector seçtiğimizde program çalışırken tarihlerin her hangi birini seçtiğimizde yanında buton belirir. Bu butona basınca da tarih ve zamanı girmemiz için bir diyalog açılır.




Options:


Diyelim Class tablomuzda Status adında bir sütunumuz var ve sadece Active, Pending ve Inactive değerleri alabiliyor. Bu değerleri kullanıcının yazmasını beklersek yazın hatası olma olasılığı var. Kullanıcıya bir listeden olası değerlerden birisini seçmesini istemek için Options kullanılır. Diyelim bu Status değerlerini ifade için bir sütunda Active için 1 , Pending için 2 ve Inactive için 3 değerleri almasını istiyoruz. Bu durumda Options seçtiğimizde çıkan liste diyalogunda şu değerleri yazarız.





Enumerator:


Bununla bir nesnenin özelliklerini listeden seçtiğimiz bir özellik değerine değiştirebiliriz.

Diyelim Class tablosu kayıtlarından her birine ait bir icon resmi var. Tablomuzda da her bir kayıt için bu iconun nasıl boyutlandırılacağına ait bilgi bulundurmak istiyoruz. System.Windows.Forms namespace bölgesinde PictureBoxSizeMode adında bir enumerator var.

Field Editor olarak Enumerator seçtiğimizde bize bu Enumerator yerini soran bir diyalog çıkar.


Listeden PictureBoxSizeMod enumeratorunu seçeriz.


Uygulama çalışırken hücre verisi yanından açılan bir dropdown listeye bu değerler gelecektir. Evvelki Options özelliğinde değerleri ve karşılık gelen yazıları biz tanımlıyorduk. Bunda ise sistemde tanımlı standart veriler kullanılıyor. Eğer sütun veri tipi tamsayı ise listedeki ismin karşılığı bir sayı değer olarak kaydedilir. Eğer sütun veri tipi string ise bu sefer listede gördüğümüz isimler veri olarak kaydedilir.



Database lookup:


Database lookup liste seçeneklerini veritabanından almak amacıyla bir sorgu girmenize imkan sağlar. Veri bir dropdown listede gösterilir ve bununla birden çok sütun değeri değiştirilebilir.

Burada TeacherID değerini girmek için öğretmen isimlerinin olduğu bir liste kullanmak istiyoruz. Teacher Name sütunu için Database lookup seçelim.


Veritabanı bağlantısı için EasyGrid ile aynı bağlantıyı kullanalım.


Sorgu olarak SQL özelliğinde Teacher tablosundan FirstName, LastName ve TeacherID sütunlarını seçelim.


İsim ve soyadını birleştirmek için SQL sorgusuna Show SQL seçerek müdahale edelim.


Sıra geldi sorgu ve gridde gösterilen sütunlar arasında bağlantı kurmaya. Data Mapping bölümünde TeacherID sütununa sorgumuz cevabının TeacherID sini eşleştirelim.


Aynı şekilde TeacherName sütunlarını da eşleyelim.


TeacherName sütunu sadece gösterim amaçlıdır. Çalışma zamanında sadece TeacherID değeri veritabanındaki tabloya yazılacak. Uygulamayı çalıştırıp listenin nasıl geldiğine bakalım.





File Name Selector:


Eğer sütun bilgisinde dosya yerini belirtir bir yazı olacaksa File Name Selector seçeriz bu durumda çalışma zamanında veri girmek için tıkladığımızda standart dosya açma diyaloğu gelir ve oradan dosya ismi seçimi yaparız.




Formül ile Hesaplanmış Değeri Göstermek


Daha önce hesaplanmış değerlerin sorguda nasıl ifade edileceğini göstermiştik. Amount adında bir hesaplanmış değer vardı.

[OrderItem].[Price] *[OrderItem].[Quantity] AS [Amount]

Fakat bu şekilde yapılan düzenleme EasyGrid nesnesi kullanarak yapılan modifikasyonlarda çalışmaz. Diyelim veriyi EasyGrid nesnesinde gösteriyoruz. Kullanıcı Price ya da Quantity değerini değiştirdiğinde yapılan değişikliğin sonucu Amount sütununda görülmez.

EasyGrid nesnesinde FielExpressions özelliği vardır. Bununla çalışma zamanında hesaplamalar yapılabilir. Bir satırdan diğerine geçince bu formül çalışır. 

Bir örenk. Diyelim ana-detay kayıtlar için gridler kullandık. Bunu daha önce görmüştük.


Detay kayıtların SQL sorgusunda hesaplanmış bir alan var.


Amount sütunu için formülü Price * Quantity olarak yazalım.


Programı bir test edelim.


Önce yukarda yeni bir kayıt ekleyip Update butonu ile kaydı veritabanına yazdıktan sonra aşağıda detay kayıtlarına ekleme yapabiliriz. Ürünü (Product) dropdown listeden adıyla seçmek için DatabaseLookup tanımlamasının nasıl yapıldığını daha önce sütun düzenleyicilerde gördük. 

Ürünü seçtiğimiz zaman ProductID ve Price otomatik olarak gelecektir. Şimdi miktar da girelim.


Sonraki satıra tıkladığımızda Amount değeri hesaplanıp gelecektir.









Combo box ile Lookup İşlemi


Database Lookup sütun editörü ile veritabanından alınan veriye göre liste çıkarmayı gördük. Benzer bir teknik EasyGrid elemanı kullanmadan da yapılabilir. 

Veri Bağlama Yoluyla Veri Girişi


Veri girişi yapmak için EasyDataSet elemanı kullanalım. Veritabanına bağlayalım ve SQL özelliklerini Class tablosundan veri alacak ve [TeacherName] olacak şekilde ayarlayalım.


EasyDataSet nesnesinin ForReadOnly özelliğini FALSE yaparak kaydedebilir olmasını sağlayalım. 
Form üzerine verileri göstermek ve değiştirmek amaçlı elemanlar yerleştirip veri bağlamalarını yapalım.


Buraya kadar işlemleri daha önce de yapmıştık, ayrıntısına girmeyeceğim. Şimdi Class tablosuna TeacherID değeri girebilmek amacıyla forma bir ComboBox elemanı ekleyelim.





Lookup Sorgusunu Tanımlamak


ComboBox listesini doldurmak için veritabanına bir sorgu yapmamız gerekiyor. Bu amaçla forma bir adet daha EasyDataSet elemanı ekliyoruz. DatabaseConnection özelliğine bir önceki EasyDataSet elemanı ile aynı bağlantıyı seçiyoruz.


Lookup için gerekli bilgileri almak üzere sorgusunu ayarlıyoruz. Bu sorguyu daha önce örnekte yapmıştık.




ComboBox'ı Lookup Sorgusuna Bağlamak


EasyDataSet2'yi DataSource özelliğini EasyDataSet2 seçerek ComboBox'a bağlayalım.


DisplayMember özelliğini TeacherName sütununa ayarlayalım.




Lookup Bağlantısı Yapmak


ComboBox ile TeacherID değeri girebilmek için seçilen isime karşı gelen TeacherID nin ComboBox değeri olarak alınmasını sağlamalıyız. 

Önce ComboBox'ın ValueMember özelliğini TeacherID olarak seçeceğiz. Bu lookup sorgusunun TeacherID sütununda karşı gelen değer olacak.


Böylece ComboBox seçilen isme karşılık gelen TeacherID değerini saklayacaktır. Sonra da bu değerin Class tablosuna yazılabilmesi için ComboBox'ın SelectedValue özelliğini Class tablosu TeacherID sütununa veri bağlaması yapıyoruz.


Biraz karışık oldu 3 kere okursanız anlarsınız inşallah, çünkü ben beş defa yeniden yazdım, kusura bakmayın. 

Artık forma kayıtlar arasında gezinme butonlarını ve aksiyon bağlantılarını da ekleyip programı deneyebiliriz.






EasyUpdator Kullanarak Veritabanı Modifikasyonları


EasyUpdator veritabanını sorgulama yapmadan da verileri değiştirebilmeyi mümkün kılan bir eleman. EasyGrid gibi verileri göstermez. EasyGrid ve EasyDataSet gibi verileri hafızasında saklamaz. Veritabanındaki verileri değiştirdiği gibi veritabanı yapısını da değiştirebilir.


Örnek : Dosya Yükleme Aktivite Kaydı


Diyelim bir dosya yükleme uygulaması yapıyoruz. Bir FTP server'a her başarılı dosya yüklemesinden sonra bilgileri veritabanına kaydetmek istiyoruz.Bu durumda veritabanına yazılan veriler elle girilmeyip program tarafından girilecek demektir. Bu durumda EasyUpdator elemanı kullanılır.

Forma bir tane FTP elemanı ekleyelim.


Ben örnek olarak Xlight FTP server uygulamasını kullandım.


FTP server özelliğini ve kullanıcı ismi ile şifreyi ayarlayalım. 


FtpClient elemanının dosya yükleme için iki metodu vardır.

UploadFile - Sadece bir tane dosya yüklemek için kullanılır.

UploadFiles - Bir kerede birden çok dosya yüklemek için kullanılır.

FtpClient1 elemanına sağ tıklayıp "Create Action" ve UploadFiles metodunu seçelim. 


Aksiyon özelliklerini girelim.


Bu aksiyonun 4 parametresi var.

SourceFolder - Aksiyonun yüklenecek dosyaları alacağı klasörün adı. Mesela E:\

filePattern - Aranacak dosya uzantısını belirler boş bırakılırsa *.* gibi tüm dosyalar seçilir.

searchOption - Alt dosyalardaki dosyaların da yüklenip yüklenemeyeceğini belirler.

targetFolder - Dosyaların server'da hangi klasöre konacağını belirtir. Boş bırakabilirsiniz.

Bu aksiyonu bir butona bağlayalım.





Hareketlerin Veritabanına Kayıt Edilmesi


FTP hareketlerini kaydetmek için veritabanı kullanacağız. Veriyi göstermek için bir EasyGrid ekleyelim. Daha sonra veri kaydetmek için EasyUpdator kullanacağız. Access dosyasını buradan örnek indirebilirsiniz. 

EasyGrid Anchor özelliğini formla beraber büyüyüp küçülecek şekilde ayarlayalım.


ForReadOnly özelliğini TRUE yapalım çünkü bu gridden veri girilmesini istemiyoruz. Veritabanı bağlantısı ve tablo sütunlarını seçelim.


Veritabanından tekrar bilgileri okumak için bir Query aksiyonu tanımlayalım. Bu aksiyon FTP işlemlerinden sonra çağrılarak son hali alınabilir.


Bu aksiyonu UploadFşles butonuna bağlayalım böylece dosya yükleme işleminden sonra grid verisi tazelenir.




Ftp Aktivitelerini Kaydetmek İçin EasyUpdator Kullanmak


Forma bir EasyUpdator ekleyelim. Veritabanı bağlantısına EasyGrid ile aynı bağlantıyı seçelim. 




Veritabanı Komutu Tanımlamak


EasyUpdator'un ExecutionCommand özelliğini ayarlayarak tablomuza yeni kayıtlar ekleyecek bir komut oluşturalım. Değerin yanındaki butona tıklayınca veritabanı komut oluşturucu penceresi açılır.

Komut satırını şöyle oluşturalım.


Veritabanı komut oluşturucu şöyle kullanılır. 
  1. Değişiklik yapılacak tabloyu seçin. Bizim burada sadece bir tane tablomuz var o da FtpAction tablosu
  2. Komut tipiniz seçin. Şu komutlardan biri olabilir.
    • Insert - Veri tablosuna yeni kayıt eklemek için kullanılır.
    • Update - Mevcut bir kaydı değiştirip yeniden kaydetmek için kullanılır.
    • Delete - Mevcut kaydı silmek için kullanılır.
  3. Değiştirilecek ya da değer girilecek sütunları seçin.
  4. Her değişecek sütuna değer verin. Bu değer sabit bir değer, bir parametre ya da bir formül sonucu olabilir. Parametre olarak tanımlamak için parametre ismi başına @ karakteri konulur.

Bu örnekte tüm sütun değerleri parametre olarak tanımlandı. 

OK tuşuna basınca tüm parametreler veri tiplerini kontrol etmeniz için liste olarak gelir. Burada tipleri kontrol edip gerekirse değişiklik yapılır. En önemlisi Access tablosunu tasarlarken sütunu Tarih/Saat seçersek burada da Date and Time veritipi seçmeliyiz. Geri kalan zaten string, boolean, integer.




FileUploaded Olayının İşlenmesi


Proje ağacında FileUploaded olayını bulup sağ tıklayalım ve Add handler method seçelim.


Metod düzenleyici açılacaktır. Bu olay her olduğunda tabloya yeni bir kayıt eklemek istiyoruz. EasyUpdator nesnesini tabloya yeni kayıt ekleyecek şekilde ayarlamıştık. Onunla bu aksiyonu yapabiliriz.

AesyUpdator1'e sağ tıklayıp "Create Action" ve metod olarak da "ExecuteWithParameterValues" seçelim. 


@localFile parametresine olayın LocalFile özelliğini seçelim.


Aynı şekilde @remoteFile ve @operation parametrelerini de olayın özelliklerine bağlayalım. @success parametresi için de TRUE sabit değerini seçelim. @msg parametresine birşey yazmıyoruz. Başarılı bir yükleme için mesaj yazmayacağız.


Yazacaklarımız bu kadar aksiyonu kaydedelim.






OperationFailed Olayının işlenmesi


Benzer şekilde OperationFailed olayı için de bir handler metodu tanımlayalım. Bu sefer her şey aynı fakat @success değerine sabit FALSE değeri giriyoruz ve @msg değerine de FtpClient1'in ErrorMessage özelliğini seçiyoruz.


Bu olayınişlenmesi de bitti.


Çalıştırıp deneyebiliriz.








Veritabanını Transaction ile Modifikasyon


Transaction Nedir


Diyelim bir uygulama tasarruf hesabından 100 lira alıp çek hesabına yatıracak. İki tane işlem yapılacak.
  1. Tasarruf hesabı 100 lira azaltılacak
  2. Çek hesabı 100 lira artırılacak.
Eğer birinci işlem sağlıklı gerçekleştikten sonra network hatası ya da benzeri bir şeyden ikinci işlem yapılamazsa ortada 100 liralık bir kayıp oluşacaktır.

Birçok veritabanı motoru buna benzer sıkıntılardan korunmak için transaction ile bu iki işlemi tek bir haberleşmede yapma desteğine sahiptir. Veritabanı eğer her iki işlem de başarılıysa tasarruf ve çek hesabı tablolarını modifiye eder yoksa işlemlerin ikisini de yapmaz. 

EasyTransactor elemanı birden fazla eylemin aynı haberleşmede yapılamsını sağlar. 


Veritabanı Update Elemanlarını Hazırlamak


İki tane EasyUpdator elemanı ile iki ayrı veritabanı update komutu oluşturacağız. Veritabanı dosyasına bağlantılarını ayarladıktan sonra Update sorgularını ayarlayabiliriz.

Şimdi tasarruf miktarı için bir komut oluşturalım.

Saving tablosunu seçelim, Update komutunu seçelim ve Amount sütununu seçelim.


Value değeri için "[Amount] - @amount" yazalım.


Filter builder ile filtreyi "[CustomerID] = @customerID" olarak girelim.


OK tuşlayarak komut oluşturucuyu bitirelim parametre tiplerini kontrol edelim.


Benzer sorguyu çek tablosu için de yapalım ama bu sefer miktar formülü [Amount] + @amount olsun.


Veri tiplerini düzenlemeyi unutmayalım.


Veritabanı Update Aksiyonlarını Oluşturmak


Forma CustomerID , Amount değerleri girmek için birer Textbox ve bir buton yerleştirelim.


EasyUpdator1'e sağ tıklayıp Create Action ve ExecuteWithParameterValues seçelim.


@amount ve @customerID değerlerini TextBox değerlerine bağlayalım.


Aynısından bir de EasyUpdator2 elemanı için aksiyon üretelim.


Aksiyon Çalıştırıcıları Transactor İçine Koymak


Forma bir EasyTransactor elemanı ekleyelim.


EasyUpdator1 ve EasyUpdator2'yi transaction içine ekleyelim.




Aksiyonları Aynı Transaction İçine Koymak


EasyTransactor elemanının ExecuteInOneTransaction olayı veritabanı update işlemlerinin bir transactionda yapılabileceği zaman aktif olur. Bu olaya iki update aksiyonumuzu bağlıyoruz. EasyTransactor elemanına sağ tıklayıp Assign action ve ExecuteInOneTransaction seçelim.




Start-transaction Aksiyonu Tanımlamak


Bir transaction ExecuteActionsInTransactiom metodunun çalıştırılmasıyla başlar. EasyTransaction elemanına sağ tıklayıp Create action ve ExecuteActionsInTransaction seçelim. 

Bu aksiyon isolation level adında bir parametre ister. 


isolationLevel şu değerleri alabilir.
  • Unspecified - Listedekilerden başka bir seviye izolasyon kullanılacak demektir. Bir ODBC ile veritabanı bağlantısı yaparsanız ve bu değeri boş yada Unspecified ayarlarsanız ODBC sürücüsü izolasyon seviyesine karar verir.
  • Chaos - Daha yüksek izolasyonlu transactionların bekleyen değişiklikleri üstüste işlenemez.
  • ReadUncommited - Kirli okuma yapılabilir, yani paylaşılmış kilitler işlenmez ve harici kilitler değerlendirilmez.
  • ReadCommited - Temiz okuma için paylaşılmış kilitler işlenir. Fakat veri transaction bitmeden değişebilir. Sonuç tekrarlanamayan okumalar ya da hayali veri.
  • RepeatableRead - Bir sorgudaki tüm veriler için kilitleme yapılır. Böylece diğer kullanıcıların veriyi değiştirmesinin önüne geçilir. Tekrarlanamayan okumayı engeller ancak hayalet satırlar hala mevcuttur.
  • Serializable - Dataset'e kilitler konarak transaction bitene kadar diğer kullanıcıların veri üzerinde update ya da insert işlemleri engellenir.
  • Snapshot - Verinin bir kopyasını alarak bir uygulama okuma yaparken diğeri aynı veriye yazma yapabilir, diğer kullanıcıları bloklamayı azaltır. Eğer yeniden sorgulasanız bile bir transaction içinde diğer transaction'un yaptığı değişikliği göremezsiniz.
Eğer izolasyon seviyesinden emin değilseni Chaos seçin.



Start-transaction Aksiyonunu Çalıştırmak


ExecuteActionsInTransaction aksiyonunu butonun click olayına bağlayalım.


Şimdi deneyip görelim


Çalıştırıp değerleri girip butona basalım.


Kayıtlar değişti.



Neler Yaptık


Bir transaction içinde veritabanı update işlemlerini gerçekleştirmek için şöyle bir prosedür izlenir.
  1. Aksiyon çalıştırıcılar olarak EasyUpdator elemanları ekleyin. Veritabanına bağlanmak ve update yapmak için özelliklerini ayarlayın.
  2. EasyUpdator elemanlarından veritabanına update yapacak aksiyonları tanımlayın. Buraya kadarki iki madde transaction kullanmadan da update yapmak için gereklidir.
  3. Bir EasyTransactor elemanı ekleyin.
  4. EasyUpdator elemanlarını EasyTransactor elemanına DatabaseCommands olarak ekleyin.
  5. Veritabanı update aksiyonlarını EasyTransactor'un ExecuteActionsInTransaction olayına bağlayın.
  6. Bir ExecuteActionsInTransaction aksiyonu tanımlayın ve bunu kullanın.






Raporlama


Raporlama Görselinin Tasarımı


Raporlama grafikler yoluyla yapılabilir. Draw2DTable veritabanından verileri alarak bir rapor tablosu oluşturabilir. 


Not, sadece forma eklenen Drawing nesneleri print edilecektir. Bir raporun formunu belirlemek için tablo haricinde çizgiler ve yazılar kullanırız.


Kağıt boyutuna göre rapor yerleşimini ayarlamak için forma sağ tıklayalım ve Drawing board'ı seçelim.



Soldan sağa yukarıdaki toolbutton'ların anlamları:
  1. Sayfa bıyutunu ayarlar.
  2. Yeni bir çizim ekler.
  3. Seçili çizimi siler.
  4. Seçili çizimi öne getirir.
  5. Seçili çizimi arkaya gönder.
  6. Yapılan değişklikleri kaydet.
  7. Yapılan değişiklikleri iptal et.
  8. Özellikler ve çizim toolbox'ı sağ üst köşeye gönderir.
  9. Drawing Board'ı tam ekran yapar.
  10. Seçili çizimin özelliklerini kaydeder. Aynı tip yeni bir çizim eklendiğinde özellikleri ona kopyalar.
Gölgeli çizgiler sayfanın sınırlarını belirler. Sağdaki dikey çizgi sayfanın genişliğini belirtir.


En aşağıya indiğimizde de sayfanın alt kenarını görürüz. 


Rapor yerleşimini sayfa byutlarına göre ayarlayalım.


Kaydedip kapatalım ve form tasarımına geri dönelim.





Rapor Sorgusunu Tanımlamak


DataQuery başlığı altında toplanan özellikler veritabanı bağlantısını ve sorguyu ayarlamak içindir. Veritabanına bağlayalım. SQL sorgusunu daha önce de aynısını yapmıştık.





Sütun Özelliklerinin Ayarlanması


ColumnProperties sütunların özelliklerini ayarlamak içindir. 


Her sütunda şu özellikler vardır:
  • Visible - Raporda o sütunun gösterilip gösterilmeyeceğini belirler.
  • MergeCell - Arka arkaya gelen satırlarda aynı olan hücrelerin birleştirilmesini belirler. İleride ayrıntılı inceleyeceğiz.
  • ShowSummaries - Bu sütundaki değerlerin toplamlarının hesaplanıp gösterilmesini belirtir. Bunu da sonra inceleyeceğiz.
  • ColumnWidth - Sütunun genişliği.
  • Alignment - Sütundaki yazıların yatay olarak hizalama formatı.
  • FormatFlags - String formatı flaglarını içerir. 
    • DirectionRightToLeft - Yazının sağdan sola doğru yazılacağını belirtir.
    • DirectionVertical - Yazının dikey yazılacağını beliritr.
    • FitBlackBox - Yazının çerçeve dışına taşmasına izin verir. 
    • DisplayFormatControl - Görsel kabartılar şeklinde kontrol karakterleri gösterilir.
    • NoFontFallback - Kullanılan fontta bulunmayan karakterler için fallback alternatife izin verilmez. Olmayan karakterler genellikle kabartı bir dikdörtgen şeklinde gösterilir.
    • MeasureTrailingSpaces - Her satır sonundaki fazladan boşlukları işaret eder. Normalde MeasureString tarafından belirlenen yazı boyutlarında bu boşluklar hesaba katılmaz. Bu biti setleyerek sondaki boşlukların da boyut hesabına eklenmesi sağlanır.
    • NoWrap - Bir dikdörtgen içine yazılan yazılarda metin kaydırma aktif değildir. 
    • LineLimit - Normalde dikdörtgen içine sığan kadar satır gösterilir. Default olarak yazı bitene kadar uzatılır.
    • NoClip - Format dikdörtgeni dışında kalan yazıların gösterimine izin verir. Default olarak dikdörtgen dışında kalan kısaltılır.
  • LineAlignment - Yazının dikey hizalaması.
  • Trimming - Kırpmayı belirler.
    • None -Kırpma yok.
    • Character - Yazı en yakın karakterden kırpılacaktır.
    • Word - Yazı en yakın kelime sonundan kırpılacaktır.
    • EllipsisCharacter - Yazı en yakın karakterden kırpılacak ve sonuna ellipsis karakteri konacaktır.
    • EllipsisWord - Yazı en yakın kelime sonundan kırpılacak ve sonuna ellipsis karakteri konacaktır.
    • EllipsisPath - Yazının orta kısmı kırpılacak ve kırpılan yerine ellipsis karakteri konacaktır.


Hücre Birleştirmesi


Eğer MergeCells özelliği TRUE değer verilirse aynı değeri gösteren ve arka arkaya gelen satırların hücreleri birleştirilecektir.






Toplamların Gösterilmesi


ShowSummaries özelliği TRUE yapılınca o sütundaki değerlerin toplamları  gösterilir.

Daha önce gördüğümüz gibi bunun sağlıklı çalışması için sorgunun gruplamak amacıyla sıralanmış olması gerekir. 

ORDER by [Order].[OrederID]

Amount sütununda toplamların gösterilmesini sağlayalım.





Toplamların Yazıtipinin Ayarlanması


SummaryFonts ile toplamların yazı tipini farklı yaparak görünüşü değiştirebiliriz.



Eğer birden fazla kritere göre sorgumuzda sıralama olsaydı. Mesela önce müşterilere göre sıralayıp sonra sipariş numarasına göre sıralasaydık, her sipariş numarası sonunda ve her müşterinin sonunda olmak üzere iki tane toplam satırı olacaktı ve bunların her ikisi de özellikler ile yazı tipi farklı ayarlanabilecektir.




Rapor Çizim Özellikleri


Rapor çizimini kontrol etmek için özellikler vardır.

Fill - Arka planın belirtilen renk ile boyanmasını sağlar.

FillColor - Arka planın boyanma rengi.

DrawingAttributes - Bu özellikler üzerinde denemeler yaparak çiziminizin görünüşüne etkilerini test edebilirsiniz.




Rapor Sayfaları Arasında Gezinmek


MoveNext, MovePrevious, MoveFirst ve MoveLast  metodları yardımı ile çalışma zamanında rapor sayfaları arasında gezinmeyi sağlayabilirsiniz.



Raporu Yazdırmak


PrintAllPages metodu raporu yazdırmak için kullanılabilir. 







Stored Procedure'lerin Çalıştırılması


DatabaseExecuter

Veritabanında bulunan Stored Procedure'leri çağırmak için DatabaseExecuter elemanı kullanılabilir. EasyUpdaotr elemanının bir alt sınıfıdır ve aynı onun gibi kullanılabilir. Transaction için kullanım dahil.




Çalışacak Komutun Tanımlanması


ExecutionCommand özelliği çalışacak komutu belirlemek için kullanılır. Karşımıza bir diyalog çıkar ve Stored Procedure ile parametreleri burada gireriz.


Diyelim veritabanında şöyle bir Stored Procedure var.


Bunu çalıştırmak için ismini ve parametrelerini gireriz.


İkinci parametre çıktı olduğu için Direction özelliğini output olarak ayarlıyoruz. 

Bir TextBox ile Param1 değerini gireriz, bir Label ile Param2 değerini gösteririz.


Stored Procedure iki tane tablo geri dönüyor. Bir DataGridView elemanı ile tabloları gösterebiliriz. Bir TextBox ile hangi tablonun gösterileceğini seçtirebiliriz.




Komutun Çalıştırılması


Bu örnekte de ExecuteWithParameters aksiyonu kullanacağız. DatabaseExecuter elemanına sağ tıklayıp Create Action ve ExecuteWithParameterValues metodunu seçelim. Param1 için textbox değerini seçelim. 


Çıktı parametresi Param2'yi label üzerinde göstermek istiyoruz. Label'a sağ tıklayıp Set Property Action seçelim ve Text özelliğini seçelim.

Value değerine Param2'yi seçelim.


Bir tabloyu DataGridView elemanında gösterebilmek için DataSource özelliğini ayarlamalıyız. DataGridView'e sağ tıklayıp Create Set Property Action seçelim ve DataSource özelliğini seçelim.

Sonuç tablolarından birini seçebilmek amacıyla value değerine formül girişini seçelim. Metod girişini seçelim ve metod olarak DatabaseExecuter1'in Results özelliğinin altından Tables özelliğinin get_item metodunu seçelim.


Metoda parametre olarak TextBox içeriğini seçelim.


Şimdi bu aksiyonları butonlara bağlayalım. 


Show Table yazan butona da sadece DataGrid1.SetDataSource aksiyonunu bağlayabiliriz. 

Artık çalıştırıp denenebilir. 

Veritabanları hakkında bu kadar. Bakalım sonraki konu ne olacak? 

Görüşmek üzere..





Hiç yorum yok:

Yorum Gönder