Windows Live Writer
22.04.2009 Çar
Tekrar merhaba,
Blog tutanlar bilir. Pek çok farklı blog engine var şu an ve neredeyse hepsi ücretsiz olarak blog tutmanıza olanak tanıyan alanlar verebiliyor. Kendilerine ait yönetim panellerini kullanarak yazılarınızın girişlerini yapabiliyor, okunma oranlarını takip edebiliyorsunuz.
Blog tutma kararı aldığımda nedense pek bir araştırma yapmadan WordPress’i tercih etmiştim. Belki yönetim paneliydi belki de işlerden çok yoğun olduğumdan kodlamasına zaman ayırmak istemediğim için varolan eklentilerinin fazlalığı nedeniyle böylebirseçim yapmıştım.
Tuttuğunuz blog her marka veya model olursa olsun
aşağıdaki adresi ziyaret ederek Windows Live Writer uygulamasını indirmenizi ve kullanmanızı şiddetle tavsiye ederim. Bloglarını daha çok “geliştirme çalışmalarında kullanılan notepad” olarak gören blogcuların çok işine yarayacağını düşünüyorum. Bu yazıyı yazmak, formatlamak ve yayınlamak sadece 2 dakikamı aldı. WordPressentegrasyonu ise kusursuz !
http://download.live.com/writer
İşte bu yazının hazırlanması sırasındaki ekran görüntüsü :
DataRowVersion | Original
20.07.2007 Cum
Bugün çok güzel ve aslında yıllardır DataTable nesnesi ile uğraşmama rağmen bilmediğim, yeni öğrendiğim DataRowVersion.Original kavramı üzerinde duracağız.
Senaryomuz şu şekilde olacak :
1. Yeni bir DataTable oluşturacağız ve bu DateTable içinde PersonelAd, PersonelSoyad, Yas alanlarını barındıracağız.
2. Ad, soyad ve yaş bilgilerini barındıran 3 DataRow oluşturacak ve bunları DataTable içerisine yerleştireceğiz.
3. Sonra, Ozan Günceler personelinin 35 olarak tanımlanan yaşını, 25 olarak set edeceğiz.
4. En son olarak diyeceğiz ki, Ozan Günceler personelinin yaşı 25 yapılmadan önce kaçtı ? Bunun cevabını almaya çalışacağız.
Hemen DataTable tanımlamasıyla başlayalım. İşin biraz kolayına kaçarak, boş bir Windows Form’un Load event handler’ı içerisine aşağıdaki kodu yerleştiriyorum :
Şimdi sırada, Ozan Günceler, İpek Çobanoğlu ve Ejder Kuvemli isimli personellerimizin tanımını yaparak, DataTable içerisine yerleştirmek var. Bunu başarabilmek için 3 DataRow nesnesi oluşturacağım ve bu nesnelerin sütun bilgilerini set ederek, DataTable.Rows içerisine ekleyeceğim.
Gerekli tanımlamaları yaptık. Dikkat ederseniz, row’ları ekledikten sonra DataTable için AcceptChanges() metodunu çağırıyorum. Bunun sebebi, row datatable içine ilk eklendiğinde Added durumunda olması ve bu durumda olduğunda bize önceki değerini vermemesi.
Şimdi sırada, DataTable içindeki 2. Sıradaki kaydın yaşını değiştirmek var. O kişi de bendenizin kaydı. Değiştirmek için aşağıdaki kodu ekliyorum :
Artık DataTable üzerindeki, Ozan Günceler’e ait yaş bilgisi değişti. Ama biz öğrenmek istiyoruz ki, değişiklikten önce bu yaş kaçtı ? Aşağıdaki kodu ekliyorum :
Tamamladığımız bu kodu çalıştırdığımızda aşağıdaki mesaj kutusunu karşılamış oluyoruz :
DataRowVersion aslında bir Enumaration, ve elemanları da şunlar :
Umarım faydası olur
Tekrar görüşmek üzere!
DataTable.Compute()
12.07.2007 Per
Çoğu zaman veritabanından çektiğimiz sorguları kod içerisinde kullanmak için DataTable içersinde kullanırız. Örneğin aşağıdaki veri kümesi SQL server’dan gelmiş olsun:
|
MusteriId |
Adi | Soyadi | Kredi |
| 1 | Ozan | Günceler | 1500 |
| 2 | İpek | Çobanoğlu | 2500 |
| 3 | Asuman | Acar | 500 |
| 4 | Kemal | Okutan | 1250 |
| 5 | Muharrem | Karabay | 3443 |
Yukarıdaki kümeyi bir DataTable içinde barındırdığımızı düşünelim. Bu veriyi göstermek kolay (GridView veya üçüncü parti kontroller kullanarak). Peki bu kümedeki belirli bir alana göre SUM, COUNT, AVERAGE veya bunlar gibi matematiksel işlemler yapmak isteseydik nasıl olacaktı ?
Mantıksal düşünüldüğünde, DataTable.Select() metodu kullanılarak, kritere göre sonuç alınabileceği düşünülebilir ancak Select() metodu matematiksel işlemler için değil, sadece filtreleme işlemleri ile kullanılır. Eğer DataTable.Select(“SUM(‘Kredi’)”) yazarak çalıştırırsanız, .NET size run-time hatası döndürecek ve Select() metodunun bu şekilde kullanılamayacağını belirtecektir.
Matematiksel işlemler için, DataTable.Compute() metodunu kullanıyoruz.
Örnek:
Bizim tablomuzdaki müşterilerin kredi miktarlarının toplamını DataTable içinden hesaplayabilmek için aşağıdaki satırı kullanmanız yeterli :
int KrediToplami = Convert.ToInt32(insDataTableMusteri.Compute(“SUM(‘Kredi’)”));
Eğer bir kriter belirterek toplam almak istersek aşağıdaki kodu kullanabilirsiniz
(MusteriId=2 için toplam) :
int KrediToplami = Convert.ToInt32(insDataTableMusteri.Compute(“SUM(‘Kredi’)”,”MusteriId=2”));
Daha fazla bilgi almak için aşağıdaki MSDN makalesinden faydalanabilirsiniz :
http://msdn2.microsoft.com/en-us/library/system.data.datatable.compute.aspx
Herkese iyi çalışmalar…
Önce kendimle ilgili bir haber vererek başlamak istiyorum. 11 Haziran 2007 tarihinden itibaren Bilge Adam’daki görevimi bırakarak, Proje Yöneticisi olarak başka bir firmada göreve başladım. Son zamanlarda blogu çok aksattım, telafi edeceğiz inşallah.
Bu yazımda değinmek istediğim konu, okurlarımdan birinden geliyor. Sevgili “Fatih”, diskimizdeki herhangi bir dosyayı , uygulamamız üzerindeki ListView içine bıraktığında, dosyanın ikonunun otomatik olarak gösterilip gösterilemeyeceğini sormuş.
İşte cevabı :
1. Öncelikle yeni bir proje oluşturuyoruz. C# ile hazırladım, vakit bulabilirsem VB.NET örneğini de göstereceğşm daha sonra. Ama zaten çevirmek kolay olur diye düşünüyorum.
2. Projeyi oluşturduktan sonra formun üzerine 1 adet ListView yerleştiriyoruz. Özellikleri aşağıdaki şekilde olmalı :
Name lstDosyaListesi
Allow Drop true
View Details
Columns 2 adet (özelliklerinin çok bir önemi yok)
3. Bu düzenlemeyi yaptıktan sonra form üzerine bir ImageList ekliyoruz. Özellikleri aşağıdaki gibi olmalı :
Name imgIkonlar
4. Property Box kullanarak, lstDosyaListesi kontrolümüzün SmallImageList özelliğini imgIkonlar kontrolüne bağlıyoruz.
(Genel Görünüm)
Bilmemiz gereken 2 Event Handler var. Bunlardan ilki DragEnter, diğeri ise DragDrop
DragEnter
Bu event, sol klik basılı iken sürüklenen nesne, kontrolümüzün sınırları içerisine girdiği anda tetikleniyor. Önemli olan nokta, drag işleminin tipini belirtmemiz gerekiyor olması (Effect) .NET bize bu konuda aşağıdaki opsiyonları sunuyor :
Copy Sürüklenen nesnenin kopyalanmasını istemek.
Move Sürüklenen nesnenin taşınmasını istemek.
Link Sürüklenen nesnenin kısayoluna ulaşmak.
None Sürüklenen nesneyi kontrol üzerinde bırakılsa bile işleme almamak.
Scroll Scroll (?) J Henüz inceleyemedim
All Listedeki hareketlerden herhangi birinin oluşmasına izin vermek.
Bizim senaryomuz gereği copy, move tarzı hareketlere gerek yok. Bu tip hareketler aynı uygulama içindeki birden fazla ListView arasında item’ları kopyalamak veya taşımak için daha çok kullanılıyor. Bizim amacımız sürüklenen dosyanın path bilgisini ve dosyanın adı ile uzantısını elde etmek. (Ben yinede Effect.Copy tanımlasını kullandım)
DragDrop
Bu event, kontrol üzerine sürüklenen nesne bırakıldığında tetikleniyor. Ikonun ne olduğuna karar verip listeye ekleyeceğimiz yer burası.
1. Önce DragEnter event handler’ını yazıyoruz:
private void lstDosyaListesi_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
2. Daha sonra da DragDrop event handler’ını yazıyoruz
private void lstDosyaListesi_DragDrop(object sender, DragEventArgs e)
{
string[] dragDropEdilenDosyalar =
(string[])e.Data.GetData(DataFormats.FileDrop, false);
foreach (string strDosyaAdi in dragDropEdilenDosyalar)
{
// Dosya uzantısının Windows Registry’de kayıtlı ikonunu al
System.Drawing.Icon insIkon = SystemIcons.WinLogo;
insIkon = Icon.ExtractAssociatedIcon(strDosyaAdi); // Extract edilen ikonu ImageList içine kaydediyoruz.
// Eğer önceden kayıtlıysa kaydetmeyeceğiz ama ![]()
// Öncelikle elimizdeki dosya yolunu FileInfo
// nesnesine bağlıyoruz.
System.IO.FileInfo insFileInfo = new System.IO.FileInfo(strDosyaAdi);
if (!imgIkonlar.Images.ContainsKey(insFileInfo.Extension))
{
//Bu ikon listede yok, ekle
imgIkonlar.Images.Add(insFileInfo.Extension, insIkon);
} // Son olarak, Drag & Drop edilen dosyanın adını ve ikonunu
// Listview üzerinde göstermek kaldı
ListViewItem insListViewItem = new ListViewItem();
insListViewItem.ImageIndex =
imgIkonlar.Images.IndexOfKey(insFileInfo.Extension);
insListViewItem.SubItems.Add(insFileInfo.Name);
lstDosyaListesi.Items.Add(insListViewItem);
}
}
İşte sonuç :
Umarım yardımı olur. Tekrar görüşmek üzere ! J









