8 Şubat 2017 Çarşamba

DevExpress GridView Sık Kullanılan Olay, Özellik veya Yaşanılan Sorunlar -3 (EditForm- birbirine bağlı 2 lookupedit örneği)

  Devexpress'te GridView'in güzel özellliklerinden olan Express EditForm özelliği açıldığında bazı olaylar normal inplace edit işlemine göre farklı olabilmektedir.

Bu örneğimizde bir adres bilgisi yazıyoruz ve gridin bir hücresinde ülkeler lookupedit'i var diğer hücrede ise şehirler için bir lookupedit var. Eğer inplace edit işlemi kullanıyor isek  ülkeler lookupedit'in  EditValueChanged  özelliğinde  şehirler lookupedit'inin  datasource'unu  null olarak atarız.  Kullanıcı  şehirler sütununa focus olduğu sırada   gridview'ın  ShownEditor   methodu devreye girer ve bu method içinde seçilmiş ülke bilgisine göre  şehir bilgisini datasource olarak buradaki lookupedit'imize atarız. Ancak  EditMode  özelliğimiz   EditForm  olarak atanmış ise  ShownEditor veya grid sütununa atanmış columnedit'in  EditValueChanged methodları  tetiklenmez.. Bu durumu çözebilmek için  EditFormPrepared  olayında  bir  lookupedit'lere  kendimiz method ekleyeceğiz.  Burada methodlar daha önceden eklenmişse diye önce methodu  -=  ile kaldırıp sonra  +=  ile ekliyoruz.

Aslında işlem normal inplaceden çok faklı değil. Sadece ilgili editorlerin olaylarını EditForm hazırlanırken ekliyoruz.
  Burada normal lookupedit objelerimizden farklı olarak 2 adet lookupedit tanımluyoruz.
 EditFormPrepared methodunda  ülke sütununa ait olan edit objesini  _countryLookUp objemize  atıyoruz,
 şehirler sütununa ait olan lookupedit objesini ise _cityLookUp  objesine atıyoruz.  Eğer atama başarılı ve objeler null değil ise ,  contry lookup'a Leave olayını,  city lookup'ına  Enter olayını ekliyoruz.  Önce çıkarıp sonra ekleme yapmamızın sebebi bir sonraki seferde Editform açıldığında olay zaten ekli ise hata vermesin diye yapılmaktadır.

contry lookup  Leave olayında yani country  lookup'ından değer seçilip fokus başka kontrole kaydığı zaman, , contry looku'ı terkedildiğinde,  şehirler lookup'ını boşaltıryoruz.  (datasource=null)

citylookup'ı aktifleştirildiği, kullanıcı  city editörüne tıkladığında ise seçilmiş  ülkeyi ilgili sütundaki bilgiyi okuyarak öğreniyoruz ve şehirler lookup'ını buna göre filtreleyen methodu çağırıp bunu lookup'a datasource olarak atıyoruz.

  

DevExpress GridView Sık Kullanılan Olay, Özellik veya Yaşanılan Sorunlar -2 (EditForm- Açma,Validasyon,Güncelleme)

  Devexpress'te GridView'in güzel özellliklerinden olan Express EditForm özelliği açıldığında bazı olaylar normal inplace edit işlemine göre farklı olabilmektedir.  Burada editform ilk açılınca yapacaklarımız, editform kaydedilmeden önce ve kayıt işlemi için hangi olayları kullandığımızdan bahsedeceğiz.
1. resimde hangi olayın ne iş için kullanıldığına dair açıklama metodun hemen üstünde yazılmıştır, örnekleri kendinize göre düzenleyebilirsiniz.

   
        Resim 1 :  EditForm ilk açılış ayarları.

   Resim 2 -  EditForm Validasyon ve kayıt işlemi

DevExpress GridView Sık Kullanılan Olay, Özellik veya Yaşanılan Sorunlar -1 (EditForm- ButtonEdit-Click Çalışmıyor)

  Eğer GridView'in özelliklerinden OptionBehavior >>  EditingMode >> (EditFormInPlace, EditForm veya EditFormInplaceHideCurrentRow seçeneklerinden biri seçerek,
düzenleme işlemini EditForm üzerinde yaptırıyorsak. Grid  sütunlarına eklediğimiz ButtonEdit vb click olayı çalışmaz. Grid satırlarına double click yapılınca EditForm açıldığı için bu buttonedit'lerin (örneğin silme veya seçme için kullanılan) click olayları çalışmayacaktır.

Bu durumu çözmek için;

 1- Buttonlara tıklanınca yapılmasını istedğimiz işlemi bir methodun içene taşırız. örneğin  OnClickSilButton() diyelim
 2- GridView'ın MouseUp eventından  hangi buttona tıklandığını yakalayarak ilgili method'u çağırırız.

   

 

27 Ocak 2017 Cuma

Tam teşekküllü yedekleme script'i (lokal, rar, full, usb, bulut)

Merhaba,

.bat dosya'yı Zamanlanmış görevler ile çalıştırarak yedekleme işimizi günde birkaç kere olmak üzere otomatikleştirebiliriz. Böylece emek verdiğimiz işleri kaybetme riskimizi azaltmış oluruz.

Daha önce yayınlamış olduğum yedekleme scriptinin düzenlenmiş ve geliştirilmiş halidir.

Düzeltme ve Eklemeler :

1- SQL YEDEKLEME: Daha önce sql yedeğini alan script devamlı aynı dosyaya aldığı için dosya zamanla büyüyor ve yedek boyutu da artıyordu. Burada
sql yedekleme dosyasını rar'layıp, kopyaladıktan sonra siliyoruz.

2- RAR YEDEKLEME:
Rarlama şifremizi parametre olarak veriyoruz.

3- BULUT YEDEKLEME:
Lokal diskimize rar'ladıktan sonra bu rar dosyayı onedrive klasörümüze kopyalıyoruz. (Ya da diğer bir bulut disk klasörümüze)
Buradaki klasör bizim bulut diskimizin lokal kopyası buraya attığımız dosya ayarlar farklı değilse otomatik buluta senkronize olacaktır.
Dosya yolunu kendi bulut disk klasörünüz olarak değiştirebilirsiniz genelde user profilinde oluyor...
Hata olmasın diye burada yazılan klasör yolu kontrol ediliyor. Varsa kopyalanıyor...

4- USB YEDEKLEME:
Bilgisayarımıza taktığımızda hangi sürücü harfini aldığını bildiğimiz bir USB diskimiz var ise, diyelimki L: harfi olsun
scriptin yanlışlıkla aynı harfte olabilecek başka bir diske kopyalama yapmaması için disk üzerinde L:\ProjeYedek\check.txt isminde bir
klasör ve dosya oluşturalım. Script bu dosya varlığını kontrol edecek ve ona göre buraya oluşmuş olan rar dosyasını kopyalayacaktır. Yoksa hata
vermeden devam edecektir.

5- ROBOCOPY YEDEK: belirlemiş olduğumuz yedeklenecek klasörümüzün, hedef yerel diskimize (yerel disk harfine map edilmiş bulutta olabilir) Full
yedek olarak tek tek kopyalanması işlemi. Burada kullanılan robocopy parametreleri ile hedef diskteki dosyalar ile kaynaktakiler senkron edilir.
değişenler kopyalanır. kaynakta silinmiş olanlar hedefte de silinir!... Bu parametreler sizin ihtiyacınıza göre değiştirilebilir.Hatta hedefte
tarihe göre bir klasör oluşturup o günün yedeği olur. Her güne ait bir yedek disk boyutunuza bağlı olarak daha güzel olacaktır.

Senaryo:

Çalışma alanım : c:\projelerim
Yedekleme Alanlarım:
SQL geçici yedekleme klasörü : c:\projelerim\_db_yedek\
Rar lokal yedekleme klasörü z:\yedeklerim\RAR_YEDEK
Rar bulut kopyası : C:\Users\%username%\OneDrive\OneDriveProjeFolder
Varsayılan USB klasörü L:\ProjeYedek\ kontrol mekanizması olarak, bunun içinde bir adet check.txt isminde dosya olmalı...
Robocopy Full yedekleme klasörü z:\yedeklerim\FULL_YEDEK



ve scriptimiz :



@ECHO OFF

set tarih=%date: =%
set tarih=%tarih:.=_%
echo %tarih%
ECHO backingup db...

sqlcmd -E -S .\sqlexpress -q "exit(BACKUP DATABASE [PROJEDB] TO DISK = N'c:\projelerim\_db_yedek\ProjeDB_%tarih%.bak' WITH DESCRIPTION = N'ProjeDB Full Backup', RETAINDAYS = 31, NOFORMAT, NOINIT, MEDIANAME = N'RSTBCKFULL', NAME = N'ProjeDB-Full Database Backup', NOSKIP, NOREWIND, NOUNLOAD, STATS = 10)"

ECHO archiving files...
set password=K@mplexP@ssw0rd4Cloud

C:\PROGRA~1\WinRAR\rar a -r -x*.bat -x*.exe -x*.mdf -x*.ldf -hp%password% -m5 Z:\yedeklerim\RAR_YEDEK\yedeklerim_%tarih%.rar C:\projelerim\*.*

if EXIST C:\Users\%username%\OneDrive\OneDriveProjeFolder (
ECHO coppying to onedrive
robocopy.exe Z:\yedeklerim\RAR_YEDEK C:\Users\%username%\OneDrive\OneDriveProjeFolder yedeklerim_%tarih%.rar /DCOPY:T /NP /R:0 /COPY:DAT /LOG:c:\OneDrive_yedekleme_Log_%tarih%.txt
)


IF EXIST L:\ProjeYedek\check.txt (
echo USB Exists coppying to I:\P\....

robocopy.exe Z:\yedeklerim\RAR_YEDEK L:\ProjeYedek yedeklerim_%tarih%.rar /DCOPY:T /NP /R:0 /COPY:DAT /LOG:c:\USB_Yedekleme_Log_%tarih%.txt

) ELSE (
echo usb is not detected.. skip usb backup
)


ECHO Copying files to backup location...
robocopy.exe "c:\projelerim" "Z:\yedeklerim\FULL_YEDEK" /CREATE /E /DCOPY:T /NP /R:0 /COPY:DAT /LOG+:c:\robocopy_yedek_log_%tarih%.txt /XF "*.exe" "*.mdf" "*.ldf"
robocopy.exe "c:\projelerim" "Z:\yedeklerim\FULL_YEDEK" /MIR /DCOPY:T /NP /R:0 /COPY:DAT /LOG+:c:\robocopy_yedek_log_%tarih%.txt /XF "*.exe" "*.mdf" "*.ldf"

if exist c:\projelerim\_db_yedek\ProjeDB_%tarih%.bak (
echo deleting db backup from source...
del c:\projelerim\_db_yedek\ProjeDB_%tarih%.bak
)

ECHO Finished..