C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

21 Ocak 2011 Cuma

DataSet'de Select Distinct

Önce DataView'e çevirip, daha sonra ToTable() metodu ile ilk parametrede distinct yapılıp yapılmayacağı bilgisini ve diğer parametrelerde de sütun isimlerini göndererek datatable'ı alabiliyoruz.
System.Data.DataView Dv = ds.Tables[0].DefaultView; 

DataTable dt = Dv.ToTable(true, "StandardUN", "Aciklama"); 

14 Temmuz 2010 Çarşamba

Windows Servis Uygulamasında HttpWebResponse Alma

Daha önce Windows uygulaması olarak yazdığım kodları Windows servise geçirince response boş geliyordu. Örnek kodlar aşağıdadır:


   1:  HttpWebRequest wreq = (HttpWebRequest)System.Net.WebRequest.Create(url);
   2:  System.Net.WebProxy pry = new System.Net.WebProxy("x.x.x.x", 80);
   3:  pry.Credentials = System.Net.CredentialCache.DefaultCredentials;
   4:   
   5:  wreq.Proxy = pry;
   6:  wreq.Method = "GET";
   7:  wreq.Timeout = 3000;
   8:  HttpWebResponse wr = (HttpWebResponse)wreq.GetResponse();
   9:  if (wr.StatusCode == System.Net.HttpStatusCode.OK)
  10:  {
  11:      System.IO.Stream s = wr.GetResponseStream();
  12:      System.Text.Encoding enc = System.Text.Encoding.GetEncoding("windows-1254");
  13:      System.IO.StreamReader readStream = new System.IO.StreamReader(s, enc);
  14:      result = readStream.ReadToEnd();
  15:  }

Bunun sebebi windows formda user account'ının, windows serviste ise network account'ının kullanılmasıymış. Çözüm için, ProjectInstaller.cs içindeki serviceProcessInstaller özelliklerinden Account özelliğini "User" olarak değiştirmek gerekiyor.

5 Şubat 2010 Cuma

Generic List<T> Sıralama

Elimizde bir nesnemiz olsun. Örneğin doküman bilgilerini tutan DocumentInfo gibi.

public class DocumentInfo {       
       
 public string documentName;      
 public string documentId;
}
Bir de DocumentInfo nesnelerinden oluşan bir listemiz var.
List<DocumentInfo> documentList = new List<DocumentInfo>();
Bu listeyi doküman isimlerine göre (documentName) sıralamak istiyoruz. Şu şekilde yapabiliriz:

documentList.Sort(delegate(DocumentInfo document1, DocumentInfo document2)
          {
              return document1.documentName.CompareTo(document2.documentName);
          });

3 Şubat 2010 Çarşamba

ListView’de EnsureVisible

Belki bilinen bir metottur ama ben yeni öğrendim ve benim için güzel bir püf noktası oldu. ListView’e yeni bir item eklediğimizde scroll’un aşağı kaymasını sağlıyor.
ListViewItem item = new ListViewItem("x");
item.EnsureVisible();

Yeni bir item ekledik ve satırı bir aşağı kaydırdık. Ben bu metodu item için kullandım, fakat listview için de şöyle bir kullanımı varmış:

ListView myListView = new ListView();
myListView.EnsureVisible(myListView.Items.Count - 1);

Bunun farkı parametre olarak index değerini alması. Hangi satıra kaymasını istiyorsanız o satırın index değerini 
yazıyorsunuz. Yukarıdaki örnekte scroll en alttaki item’a kayacaktır.

28 Ocak 2010 Perşembe

Generic Listede Case Insensitive Arama

Herhangi bir eleman generic listede var mı diye kontrol ederken, büyük-küçük harfi önemsemeden kontrol etmek istiyorsak bunu nasıl yapabiliriz? Bir örnek verecek olursak;

List<string> imageFormats =
new List<string>() { "bmp", "png", "gif", "jpg", "jpeg" };

Resim formatlarını yazdığımız bu listede bu uzantılar büyük harflerle de yazılmış olabilir. Herhangi bir dosyaya resim formatında mı diye bakmak istediğimizde hata alırız. Bunu aşağıdaki gibi Contains metoduna parametre ekleyerek çözebiliriz:

private bool isImageFormat(string extension) { List<string> imageFormats =
            new List<string>() { "bmp", "png", "gif", "jpg", "jpeg" };
            return imageFormats.Contains (extension, StringComparer.OrdinalIgnoreCase);
}

4 Kasım 2009 Çarşamba

Generic List'de Birden Fazla Aynı Değere Sahip Eleman Var mı? (How to find duplicate values from List<> ?)

Belki biraz yavaş bir çözüm olabilir ama alternatiflerden biri:

private static List<string> findDuplicateValues(List<string> values)

{
         List<string> duplicateValues = values.FindAll(delegate(string i)
        {
                return values.FindAll(delegate(string j)
               {
                    return j == i;
               }).Count() > 1;
       }).Distinct().ToList();

       return duplicateValues;
}

13 Mayıs 2009 Çarşamba

TextBox'a Para Değeri Girme ve Bölgesel Dil Ayarları

Eğer NumericEditBox veya MaskedTextBox gibi para miktarı girilen textbox'lar kullanıyorsanız, bölgesel dil ayarlarıyla ilgili sorun yaşayabilirsiniz. Çünkü her dil ayarına göre farklı noktalama işaretleri kullanılıyor.

Bu durumda programın kullanıldığı her bilgisayarda bölgesel dil ayarlarının değiştirilmesi yerine, tek satırlık kod yazarak, o anlık bölgesel dil ayarının öyle algılanmasını sağlayabilirsiniz. İşte bunun için kullanacağınız kod:

Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");

Güncelleme(23.12.2009):
Bölgesel seçeneklerin özelleştirilebildiğini öğrendim. Yani ayarı Türkçe olarak versek de ondalık sayılarda kullanılan ayraçlar (nokta ve virgül gibi) özelleştirilebiliyormuş. Bu da yukarıda yaptığımız işlemi geçersiz kılıyor. Bunun için en iyi çözüm bu ayraçları da en başta belirtmek (tabi işinize yarar şekilde). Böylece kullanıcı kendi ayarlarında ne yapmış olursa olsun sizi ilgilendirmemiş oluyor.

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ",";
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = ".";