27 Eylül 2013 Cuma

7 Haziran 2013 Cuma

30 Mayıs 2013 Perşembe

Unfuddle ve Svn

(Kendime Not)
Aşamalar:
1- Unfuddle' dan bir hesap al
2- https://portallms.unfuddle.com/ şekinde bir domain verecek.
3- Repositories' ten new ile yeni bir proje oluştur.
4- Bir URL verecek, bunu kopyala.
5- PC de yeni bir klasör oluştur, sağ tıkla, SVN Checkout' u seç.
6- Buraya unfuddle' dan gelen kodu yapıştır ve işlemi tamamla.
7- Artık projen ortak kullanıma hazır :)

29 Nisan 2013 Pazartesi

ASP.NET ViewState Nedir

ViewState (Görüntü Durumu, Durum Yönetimi), verileri saklamak için default olarak kullanılan tekniktir. Sayfa post back olduğunda ve geri geldiğinde aynı sayfadaki değerlerin saklanması işlemini ViewState yapar. Kısacası sayfanın tarayıcıdan dönerkenki haline ulaşabilmemizi ve sayfa geri gönderilirken otomatikman tekrar bu bilgilerle gitmesini sağlar. Dolayısıyla sayfalar arası veri taşımaz.

Viewstate sayesinde sayfa kendiliğinden (button click olayı) yeniden yüklense dahi, viewstate' e atadığınız bilgi sayfadan ayrılmadığınız sürece kaybolmayacaktır. Bunu web sitelerdeki detay sayfalarında çok sık görüyoruz.

int id = Request.QueryString["id"].ToString;

kodu ile detayına gitmek istediğimiz elemanın id değerini alıyoruz. Fakat sayfada post olaylarında bu durum kayboluyor ve proje patlıyor. Bunu ViewState ile yaparsak id bilgisi sayfadan ayrılmadığımız sürece kaybolmayacaktır. Şimdi bu kodu ViewState üzerinden görelim:


public int id
{

get { return Convert.ToInt32(ViewState["id"]); }

set { value = ViewState["id"] }
}

26 Nisan 2013 Cuma

C# Tüm CheckBox' ları Seçmek

Hepimizin mail sayfalarında gördüğü üzere tek tıkla tüm mailleri seçip silebiliyoruz. Şimdi bu tek tıkla tüm checkboxları seçme işlemini görelim. Sayfada belirsiz sayıda checkbox olsun. Biz bunları foreach döngüsü ile tek tek bulacağız.




Yapımız yukarıdaki gibi. Ben Tümünü Seç' e tıkladığım zaman sayfada varolan dört tane checkbox' ın da seçili hale gelmesini istiyorum. Bunun için önce Tümünü Seç checkbox' ının koduna bakalım:
<asp:CheckBox ID="chckAll" runat="server" Text="Tümünü Seç" AutoPostBack="true" OnCheckedChanged="chckAll_CheckedChanged"/>

AutoPostBack özelliği checbox' ı işaretlediğimiz anda başka hiçbir şey yapmadan bağladığımız eventin tetiklenmesini sağlayacak.

OnCheckedChanged eventi ise checkbox seçili hale gelince çalışacak kodları barındırır. Şimdi bu kodlara gelelim;

protected void chckAll_CheckedChanged(object sender, EventArgs e)
    {
        foreach (Control chck in Panel1.Controls)
        {
            if (chck is CheckBox)
            {
                if ((chck as CheckBox).Checked == false)
                {
                    (chck as CheckBox).Checked = true;
                }
            }
        }
    }

Önce foreach ile tek tek gelen kontrollerin bir checkbox olup olmadığına baktık.
Daha sonra seçilen kontrölün checkbox olduğunu doğrulamak için is operatörünü kullandık.
Son olarak da as operatörü ile checkboz olduğuna karar verdiğimiz kontrole atama yaptık.

25 Nisan 2013 Perşembe

C# is ve as Operatörleri


is operatörü : Bir değişkenin tipinin dönüşüm yapmak istediğimiz tiple is ile karşılaştırarak çevrimin doğru olup olmayacağını karşılaştırabiliriz. Yani is ile boolean bir değer elde edilir. is anahtar sözcüğü  değişken tipinin karşılaştırma tipine bakarak bize o mu değil mi bilgisini vererek tip dönüşümlerinde fayda sağlamaktadır. is sadece tanımlı tipler üzerinde çalışır,i yani biz bir class tanımlayıp bunun tipi hakkında bilgi almak istiyorsak is bize bu konuda yardımcı olamaz. YANİ İS CONTROL EDER

int i = 50;
bool b = i is string; // b false olur

as operatörü : Uygun türler arasında tür dönüşümünü sağlar.Daha önce is sadece tanımlı tipler üzerinde çalıştığını. Yani biz bir class tanımladıysak ve bunun tipi hakkında bilgi almak istiyorsak is bize bu konuda yardımcı olamayacağını söylemiştik. Bu durumda devreye as anahtar kelimesi devreye girer. is operotoruyle çok benzerdi fakat is operatoru boolean bir değer döndürürken as operatoru hedef tipin referansını döndürür. Eğer dönüşüm imkansız ise null değeri döndürür. YANİ AS ATAMA YAPAR

object i = "50";
string s = i as string;

C# Dictionary Sınıfı

System.Collections.Generic sınıfına ait bir sınıftır. İçerisindeki değerlerin anahtar yardımıyla saklandığı bir koleksiyon türüdür. Dictionary içerisindeki anahtarların türü belirtilmelidir. her anahtar birbirinden farklı olmalıdır.


 Dictionary<string, string> isimler = new Dictionary<string, string>();
        isimler.Add("Ali AKSOY", "3dsmax");
        isimler.Add("Yakup BABALI", "AfterEffects");
        isimler.Add("Metin ESKİLİ", "VisualStudio");
        foreach (var isim in isimler)
        {
            Response.Write(isim);
        }

Yukarıdaki kodda ekrana basma olayını;

Response.Write(eleman.Key + "=" + eleman.Value); şeklinde de yapabilirdik.

KeyValuePair özelliğini kullanarak da Dictionary içerisinde tanımlanmış olan anahtari değer ikilisine erişebiliriz. Bunun için foreach döngüsünü aşağıdaki gibi değiştirelim:

foreach(KeyValuePair<string, string> isim in isimler)



Dictionary içerisindeki herhangi bir değerin içeriğini...

isimler["Ali AKSOY"] = "Donanım"; şeklinde değiştirebiliriz.

ToList metodunu kullanarak oluşturdupumuz Dictionary' i List nesnesine dönüştürebiliriz.

Koleksiyonlar (Collections) 2

Generic Collections
İçerisinde saklanabilecek veri türüne karar verilebilen, aynı türdeki verilen bir arada saklandığı koleksiyon türleridir. System.Collections.Generic namespace' i altında bulunur. Non Generic koleksiyonlarda olduğu gibi veriler object rünüden olmadığı için boxing ve unboxing işlemleri yapılmaz. Dolayısıyla Generic Collection' lar daha performanslı çalışırlar. Bu koleksiyon altındaki sınıflar:


  • List
  • Stack
  • Queue
  • LinkedList
  • Dictionary
  • SortedDictionary
  • SortedSet
  • HashSet
LIST SINIFI

Veri türü belirtilerek dizi tanımlamak için kullanılır. Veri türü belirtildiğinden dolayı, içerisine aktarılan değerler, herhangi bir boxing (değer türünden bir değişkenin referans türünden bir değişkene aktarılması) işlemine tabi tutulmayacaktır. Dolayısı ile boxing işleminin gerçekleştirildiği ArrayList sınıfına göre daha performanslı çalışacaktır. Herhangi bir eleman sınırı konulmadan tanımlanır. List’ in boyutu içerisine eklenen eleman sayısına göre otomatik olarak belirlenir. System.Collections.Generic sınıfına ait bir sınıftır.

List<Değişken türü> isim = new List<Değişken türü>()

NOT: List sınıfı ArrayList sınıfının generic karşılığıdır. Hemen hemen tüm metodları ortaktır.

STACK(YIĞIN) SINIFI
Son giren ilk çıkar (LIFO) yöntemine göre çalışır. Yani yığın içerisine eklenen son elemana ilk olarak erişilebilirken, ilk olarak eklenen elemana en sonda erişilebilir.

Push metodu stack içerisine değer eklemek için kullanılır.

 Stack<string> isimler = new Stack<string>();
        isimler.Push("Ali");
        isimler.Push("Veli");
        isimler.Push("Metin");
        isimler.Push("Murat");

        foreach (string eleman in isimler)
        {
            Response.Write(eleman + "<br/>");
        }

Bu kodu çalıştırdığımzda en son eklenen "Murat" değerinin en başta olduğunu görürüz. (yani reverse)

ElementAt özelliğini kullanrak stack içerisinde index numarası verilen bir elemanı görüntüleyebiliriz.

Peek metodu stack içerisinde en üst sırada bulunan elemanı verir.

Pop metodu stack içerisinden eleman silmek için kullanılır. Silinen eleman en üstte yer alan eleman olacaktır.

QUEUE(KUYRUK) SINIFI
FIFO yöntemine göre çalışır.

Enqueue metodu queue içerisine değer eklemek için kullanılır. İlk eklenen değer en başa eklenecektir.

Peek metodu queue içerisinde en üst sırada bulunan elemanı verir.

Dequeue metodu ile en üstte yer alan eleman silinir.

24 Nisan 2013 Çarşamba

Koleksiyonlar (Collections) 1

Koleksiyonlar, System.Collections namespace' i altında yer alırlar, aynı türden verileri barındırabildiği gibi farklı tür verileri de içinde barındırabilir. Eleman sınırı konulmadan, herhangi bir eleman sayısı verilmeden tanımlanabilirler. Koleksiyon içinde tutulan değerler boxing ve unboxing işlemlerine tabi tutulurlar. 3 gruba ayrılırlar:

  • Generic
  • Non Generic
  • Specialized

1.Non Generic Collections

Farklı türlerdeki verilerin bir arada saklanabildiği, içerisine aktarılan değerlerin, boxing(değer türünden referans türüne dönüşüm) işlemi ile object türüne dönüştürülerek tanımlandığı koleksiyon türleridir. System.Collections namespace' i içerisinde yer alırlar. Non Generic koleksiyon başlığı altında 3 sınıf var:

  • ArrayList
  • Hashtable
  • SortedList

1.1 ArrayList Sınıfı


Koleksiyonlar, System.Collections namespace' i altında yer alırlar, aynı türden verileri barındırabildiği gibi farklı tür verileri de içinde barındırabilir. Eleman sınırı konulmadan, herhangi bir eleman sayısı verilmeden tanımlanabilirler. Koleksiyon içinde tutulan değerler boxing ve unboxing işlemlerine tabi tutulurlar. 3 gruba ayrılırlar:
  • Generic
  • Non Generic
  • Specialized
1.1.1. Add Metodu
ArrayList içerisine eleman eklemek için kullanılır.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
Response.Write(isimler[0]); // Ali

ArrayList içerisine farklı değişken tiplerinden olan elemanlar aynı anda eklenebilir.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("a");
isimler.Add(123);

ArrayList içine eklediğimiz bir değeri daha sonra indeks numarası üzerinden değiştirebiliriz.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler[0] = "Veli"; // Ali artık Veli oldu

1.1.2. Insert Metodu
Add metodu kullanılarak yapılan eklemelerde eklenen her eleman dizinin sonuna eklenir. Dizi içerisinde istenen bir yere eleman eklemek için Insert metodu kullanılır.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Insert(0, "Veli"); // Artık ilk sırada Veli var, Ali' nin index numarası 1 oldu.

Ayrıca FixedSize Metodu ile sabit kapasiteli ArratList tanımlayabiliriz.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("a");
isimler.Add(123);
ArrayList yeni_isimler = ArrayList.FixedSize(isimler);
yeni_isimler.Insert(0, "Deneme"); // Burası çalışmaz.

Fakat FixedSize olan bir ArrayList' te eleman değiştirme işlemini yapabiliriz.

1.1.3. Sort Metodu
Dizileri sıralama amacı ile kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");
isimler.Sort();

1.1.4. Count Özelliği
Bir dizinin eleman sayısını bulmak için kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");

for (int i = 0; i <= isimler.Count - 1; i++)
        {
            Response.Write(isimler[i] + "<br/>");
        }

Şimdi yukarıdaki kodda önemli bir nokta var. isimler.Count - 1 ifadesi.... isimler.Count bize 3 değerini döndürür. Yani dizimiz 3 elemanlıdır; Ali, Veli, Aksoy. Fakat biz i değişkeni ile dizimizin index numaralarını alacağız. Index 0' dan başladığı için i en büyük 2 olabilir. Biz isimler.Count deseydik program hata verecekti, çünkü index numarası 3' e eşit olan bir eleman yok.

1.1.5. Remove Metodu
Dizi içerisinden eleman silmek için kullanılır.

isimler.Remove("Ali");


1.1.6. RemoveAt Metodu
Dizi içerisinden index değeri belirtilen elemanı silmek için kullanılır.

isimler.RemoveAt(isimler.Count - 1); // index değeri 2 olan Aksoy elemanını siler.


1.1.7. Clear Metodu
Dizi içerisindeki elemanların hepsini silmek için kullanılır.

isimler.Clear();


1.1.8. Reverse Metodu
Diziyi tersine çevirmek için kullanılır. Yani çıktı Ali, Veli, Aksoy yerine; Aksoy, Veli, Ali olur.


1.1.9. GetRange Metodu
Bir dizinin belirtilen kısmını geriye döndüren bir metoddur.

Dizi_adı.GetRange(index, adet);

index : dizinin başlangıç değerini beliritir.
adet : Dizinin başlanıç değerinden itibaren kaç adet elemanın alınacağını beliritir.



ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");
ArrayList digerisimler = isimler.GetRange(0, 2);


foreach (string eleman in digerisimler)
{
Response.Write(eleman + "<br/>");
}

Yukarıdaki kod bize Ali, Veli sonucunu verir. (ilk indexten başla ve iki adet eleman al)


1.1.10. AddRange Metodu
Bir diziye belirtilen başka bir diziyi eklemek için kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");


ArrayList digerisimler = new ArrayList();
isimler.Add("li");
isimler.Add("eli");
isimler.Add("soy");

diller.AddRange(digerdiller);

foreach(string eleman in diller)
{
Response.Write(eleman);
}


1.1.11. InsertRange Metodu
Belirtilen bir diziyi, belirtilen index numarasından başlayarak başka bir diziye eklemek için kullanılan metoddur.

HedefDizi.InsertRange(index, EklenecekDizi);

1.1.12. RemoveRange Metodu
Belirtilen index numarasından itibaren belirtilen sayıdaki elemanı diziden silmek için kullanılan metoddur.

DiziAdı.RemoveRange(index, adet);

1.2. HashTable Sınıfı

System.Collections sınıfı altında yer alır, içerisindeki değerleri index numarasıyla değil de, anahtar yardımıyla saklar. Hashtable içerisindeki anahtar ve değerlere ICollections arayüzünü kullanarak erişebiliriz.

Hashtable isimler = new Hashtable();
        isimler.Add("A", "Ali AKSOY");
        isimler.Add("B", "Burak GÖL");
        isimler.Add("Y", "Yakup BABALI");

        ICollection degerler = isimler.Values;

        foreach (var deger in degerler)
        {
            Response.Write(deger + "<br/>");
        }

Bu kod sonucunda ekranda elemanların Value değerleri tek tek yazdırılır. ICollection ile elemanların key değerlerinde ulaşmak isteseydik;

ICollection degerler = isimler.Keys; yazacaktık.

ICollection ile sadece key veya sadece value değerlerini tutabiliyoruz. Bir de DictionaryEntry var. DictionaryEntry  sayesinde hem key hem de value değerlerine aynı anda erişebiliyoruz. Şimdi bunu görelim:

Hashtable isimler = new Hashtable();
isimler.Add("A", "Ali AKSOY");
isimler.Add("B", "Burak GÖL");
isimler.Add("Y", "Yakup BABALI");

foreach(DictionaryEntry eleman in isimler)
{
Response.Write(eleman.Key + "=" + eleman.Value);
}

Hashtable içerisinde bir anahtar ya da değerin mevcut olup olmadığını belirlemek için ContainsKey ve ContainsValue metodları kullanılabilir. Bu metodlar geriye boolean değer döndürür.

isimler.ContainsValue(aranan)

1.2. SortedList Sınıfı

Elemanlarına erişimin hem index numaraları hem de anahtar yardımıyla yapılabildiği koelksiyon türüdür. İçerisindeki değerleri sıralı olarak saklar.

IndexOfKey metodunu kullanarak, anahtar ismini verdiğimiz bir elemanın index numarasını elde edebiliriz.

isimler.IndexOfKey("A");

IndexOfValue ile değer ismini verdiğimiz elemanın index numarasını öğrenebiliriz.

GetKey metodunu kullanarak index değerini belirttiğimiz bir elemanın anahtarını elde edebiliriz. Örneğin 2 nolu index değerine sahip anahtarı elde etmek için;

isimler.GetKey(2);

GetByIndex metodunu kullanarak index değerini belirttiğimiz bir elemanın değerini elde edebiliriz.

Diziler (Arrays)

Aynı türdeki verilerin sıralanarak gruplandırılmasında kullanılan  yapılardır. Dizilerin eleman sayıları sabit olarak belirlenmelidir, tanımlanmış olan eleman sayısı daha sonradan değiştirilmek istenirse Array.Resize metodu ile değiştirilebilir.  

Diziler, System.Array namespace' i içerisinde yer alır. Dizilerin eleman sayıları sabit ve dizi içerisine eklenen elemanlar herhangi bir dönüştürme işlemine (boxing ve unboxing) tabi tutulmadığı için Koleksiyonlara göre daha hızlıdır.

Diziler de aslında bir koleksiyondur. Ancak aynı türdeki verileri saklamada kullanılan bir koleksiyondur. Diziler referans tipinden olmakla beraber, hem değer tipinde hem de referans tipinden veriler dizi içerisinde saklanabilir. 

int[] no = new int[10];

string[] ad = {"Ali", "Veli"}; 

char[] karakter = {'?', '!'};

Dizi değişkenlerinde kullanılan bazı metotlar

CreateInstance Metodu

Yeni bir diziyi, değişken tipini ve eleman sayısını belirleyerek tanımlamak için kullanılan metoddur.

Array.CreateInstance(değişken türü, eleman sayısı, boyut);

Array yenidizi = Array.CreateInstance(typeof(string), 3);

IsArray Metodu

Bir değişkenin dizi değişkeni olup olmadığını anlamak için kullanılan metoddur. Geriye boolean değer döndürür. (true/false)

string[] okul = {"Fen","Anadolu","Meslek"};
Type tip;
tip = okul.GetType();
Response.Write(tip.IsArray);

SetValue  ve GetValue Metodu

Dizi elemankarına değer atamak için kullanılır.

Array ad = Array.CreateInstance(typeof(string), 3);
ad.SetValue("Ali AKSOY", 0);
ad.SetValue("VeliAKSOY", 1);
ad.SetValue("Aa AKSOY", 2);
Response.Write(ad.GetValue(2)); // Aa Aksoy

GetValue() metodu dizi içerisindeki elemanlara ulaşmak için kullanılır.

Join Metodu

Dizi içerisindeki değerlerin hepsini bir string değişkene, belirtilen ayırıcı karakter ile aktaran metoddur. 

19 Nisan 2013 Cuma

C# IndexOf() Metodu

Terimin anlamını okuyarak metodun ne iş yaptığını anlamak bence biraz mantıksız. yani okuyorsun tamam anladım diyorsun ama uygulama da çakılıp kalıyorsun. Yine de bu metodun anlamı, belirtilen bir karakter ya da stringin başka bir string içinde bulunup bulunmadığına bakılması, eğer bulunursa hangi konumda olduğu bilgisinin elde edilmesidir. Örnek yapalım:

string cumle = "http://www.aaksoy.com";

int baslangic_pozisyon = cumle.IndexOf(".") + 1;  

Label1.Text = cumle.Substring(baslangic_pozisyon, cumle.Length - baslangic_pozisyon); 


cumle stringi içerisindeki metnin belirli bir yerinden itibaren almak istiyoruz. Öncelikle hangi pozisyondan alacağımızı belirlememiz gerekir. Yani metnin neresinden itibaren alacağımızı belirlemeliyiz. Bunun için IndexOf() metodunu kullandık;

int baslangic_pozisyon = cumle.IndexOf(".") + 1;  


Yukarıdaki kodda yaptığımız şu:
1 - Nokta(.) işaretini metnin başından itibaren arayarak bul.
2 - Başlangıç noktası olarak bulunan nokta(.) işaretinin bir sonraki karakterini +1 ile al. (yani a harfi)
3 - baslangic_pozisyon değişkenini sayfaya yazdırmak istersek "11" sonucunu alırız, yani a harfini...
4 - Ayrıca metni index numarası şeklinde sayarız, yani ilk karakter birinci değil sıfırıncıdır. (IndexOf için)

cumle.Length

Bu kod bize string içerisinde saklanan metnin uzunluğunu verir. Bunu sayfaya yazdırmak istersek "21" sonucunu alırız. Length ile sayım işlemi yaparken ilk karakteri IndexOf metodundaki gibi sıfır diyerek değil bir diyerek saymaya başlarız.

Son olarak Substring metodu ile metnin, belirtilen bir kısmını alabiliriz.

Label1.Text = cumle.Substring(baslangic_pozisyon, cumle.Length - baslangic_pozisyon);

Substring şe şekilde çalışır ;

işlem_yapilacak_metin.Substring(Başlangıç pozisyonu, uzunluk);

Başlangıç pozisyonunu zaten IndexOf metodu ile bulmuştuk, uzunluk parametresini ise metnin tamamının uzunluğundan başlangıç uzunluğunu çıkararak buluruz. Açalım biraz :)

Başlangıç Pozisyonu : 11
Metnin tamamının Uzunluğu: 21;

O halde almak istediğimiz aralık 21 - 11 = 10 luk bir kısım...

 Koddaki cumle.Length - baslangic_pozisyon buradan geliyor ve sonu olarak bize aaksoy.com değerini veriyor.

C# Split Metodu

İstenilen karaktere göre verilen metni parçalara bölmeye yarar.



string metin = "Ali,Veli,Mehmet,Ahmet,Hüseyin";
        string[] yenimetin = metin.Split(',');
        foreach (var parca in yenimetin)
        {
            Response.Write(parca + "<br/>");
        }

Yukarıdaki örnekte metin virgül işareti baz alınarak parçalara ayrıldı. Daha sonra string tipinde bir diziye atandı. Sonuç:





18 Nisan 2013 Perşembe

C#' ta Seçilen CheckBox' lar İle İşlem Yapmak

Butona tıklandığında değişken sayıda Checkbox kontrolü olan sayfamızda foreach ile tüm seçili olan checkboxların text değerlerini alalım:



protected void Button1_Click(object sender, EventArgs e)
    {
        string sonuc = "";
        foreach (object eleman in this.Controls)
        {
            if (eleman is CheckBox)
            {
                if ((eleman as CheckBox).Checked==true)
                {
                    sonuc = sonuc + " " + ((CheckBox)eleman).Text;
                }
               
            }
        }
        Response.Write(sonuc);
    }
1 - Foreach ile tüm sayfayı gezip elemanları teftiş ettik
2 - If döngüsünde foreach' ten tek tek gelen elemanların türünün checkbox olup olmadığını kontrol ettik.
3 - Burada şöyle bir hata var; foreach döngüsünde kullandığımız this.Controls deyimi bize sayfadaki ilk kontrolü, yani form nesnesini verecek. Bu yüzden seçilen ilk child checkbox değil form nesnesi olacağından if döngümüz çalışmayacak. Bunu önlemek için tüm checkbozlarımızı bir panel içine alıyoruz ve foreach içinde Panel.Controls ifadesini kullanıyoruz. Kodumuzun yeni hali:

protected void Button1_Click(object sender, EventArgs e)
    {
        string sonuc = "";
        foreach (object eleman in Panel1.Controls)
        {
            if (eleman is CheckBox)
            {
                if ((eleman as CheckBox).Checked==true)
                {
                    sonuc = sonuc + " " + ((CheckBox)eleman).Text;
                }
               
            }
        }
        Response.Write(sonuc);
    }

Burada eleman as Checkbox tabiri Cast olayıdır. Yani elemanın tipi checkbox oldu diyoruz. Aynı işlemi (Checkbox)eleman şeklinde de yapabilirdik. Fakat kullanışlı olanı as deyimini kullanmaktır.
Artık foreach döngüsü ile sayfadaki Checkboxları yakalayabiliyoruz. Daha sonra gelen checkboxın seçili olup olmama durumuna checked kontrolü ile bakıyoruz. Ve son olarak seçili olan tüm checkboxları sonuc değerine ekliyoruz. Sonuç:

17 Nisan 2013 Çarşamba

C# Veri Tipi Dönüşümleri


Bazen farklı tipteki verileri bir işleme tabi tutmak gerekebilir. Bunun için de veri tipleri arasında dönüşüm yapmak gerekir. Basit tip dönüşümü;

[değişken] = (hedef veri tipi)[değişken] 
şeklinde yapılır. Bir örnek ya

int sayi1 = 15;
int sayi2 = 4;
decimal sonuc = sayi1 / sayi2;
Response.Write(sonuc);

Yukarıdaki örnekte sonuç sadece "3" olarak görünecektir. Halbuki sonucun "3,75" olması gerekir. Şimdi aynı örneği değiştirelim:

int sayi1 = 15;
int sayi2 = 4;
decimal sonuc = (decimal)sayi1 / (decimal)sayi2;
Console.WriteLine(sonuc);
Artık sonucu "3,75" olarak görebiliriz.

Convert Sınıfını Kullanarak Veri Tipi Dönüşümünü Yapmak
Convert ile dönüşüm yapmak için her veri tipinin karşılığı olan CTS tiplerini bilmek gerekir. Bunlar aşağıda gösterilmiştir.


CTS (Common Type System - Ortak Tip Sistemi) : Veri tipleri ile ilgili kuralları tanımlar ve böylece farklı dillerde yazılmış olan programların birlikte çalışmasını mümkün kılar. Örnek:

int sayi;
strin metin = "12345";
sayi = Convert.ToInt32(metin);
Response.Write(sayi);
metin değişkeninde string olarak "12345" sayısı tutulmaktadır. Bunu Convert.ToInt32 ile int tipine dönüştürüyoruz.





C# Veri Tipleri

C#' ta veri tipleri Değer Tipleri ve Referans Tipleri olmak üzere iki kategori altında toplanır.



DEĞER TİPLERİ
C#' ta sbyte, byte, short, ushort, int, uint, long, ulong, float, double, decimal, bool ve char olmak üzere 13 adet veri tipi bulunmaktadır. Bu veri tiplerini dört rupta toplayabiliriz.

1. Tamsayı Veri Tipi
Bir insanınyaşı ile ilgili kayıt tutmak istiyorsak bu yaş aralığı 0 ile 120 arası olabilir. Bu durumda uygun olan veri tipi "byte" olarak görülmektedir. Örnek; byte yas = 20; Tamsayı veri tipleri aşağıdaki tabloda listelenmiştir.



2. Kayan Noktalı Sayı Veri Tipi
Bunlara gerçek sayılar da denilmektedir. Bunlardan "float" ve "double" veri tipleri noktadan sonraki sayıları yaklaşık olarak tutarken "decimal" veri tipi tam bir kesinlikle tutar. Paraal işlemlerde "decimal" veri tipi kullanılır.

3. Karakter(char) Veri Tipi
Klavyeden girilen her bir değere karakter denir. Bu değerler "char" veri tipinde tutulur. Bu veri tipi değişkende tek tırnak içinde tutulur. char Karakter = 'A';

4. Doğru/Yanlış(true/false) Veri Tipi
Evet/Hayır şeklinde sonuç verecek verilerde "bool" veri tipi kullanılır. bool degisken = true;

REFERANS TİPLERİ
Referans tipleri sınıflarla tanımlanır. Bunlardan en sık kullanılan "string" veri tipidir.

16 Nisan 2013 Salı

Access Modifiers (Erişim Belirleyiciler)

PRIVATE: Private belirleyicisinin kullanıldığı metot ya da parametreye sadece tanımlandığı sınıf içerisinden erişilebilir. Sınıflar varsayılan olarak private olarak tanımlanır.

PUBLIC: Public belirleyicisinin kullandığı metot ya da parametreye erişim tamamen serbesttir. Gerek tanımlandığı sınıf içerisinden gerekse tanımlandığı sınıf dışından erişmek mümkündür.

PROTECTED: Protected belirleyicisinin kullanıldığı metot ya da parametreye, sadece tanımlandığı sınıf içerisinden veya bu sınıftan türetilmiş sınıflardan erişilebilir.

STATIC: Eğer metoda direkt olarak sınıfın ismini kullanarak erişmek istersek metodu static olarak tanımlamamız gerekir. static olarak tanımlanan metotlar, sınıflardan türetilen nesnelerden bağımsız hareket ederler. Dolasıyı ile static metotları içerisinde tanımlandıkları class' dan yeni bir nesne oluşturmadan direkt olarak sınıf ismi.metot ismi şeklinde kullanabiliriz.

INTERNAL: Internal belirleyicisinin kullanıldığı metot ya da parametreye sadece tanımlandığı sınıf içerisinden erişilebilir. Hazırladığınız dll dosyasını aynı proje yada program içerisinde kullanabilir, ancak başka proje ya da programdan erişemezsiniz.

PROTECTED INTERNAL: Protected Internal belirleyicisinin kullanıldığı metot ya da parametreye tanımlandığı sınıf içerisinden, bu sınıftan türetilmiş başka bir sınıf içerisinden ya da aynı assembly içerisinden erişilebilir.


C#' ta Metot ve Fonksiyonlar

METOT OLUŞTURMA VE ÇAĞIRMA

private void Topla()
{
int x=5;
int y=3;

int z = x + y;
}

Oluşturduğumuz Topla isimli metotta int tipinde Rakam1 ve Rakam2 parametrelerini metot içinde tanımlıyoruz. Bu metodu başka bir metot veya olay içinde şu şekilde çağırıyoruz;

Topla();

Bu metodu çağırdığımızda yapacağı işlem 5 ve 3 rakalarını toplamak olacaktır. Peki ya biz bu şekilde sabit rakamları değil de kulanıcının girdiği rakamları metot içinde toplamak isteseydik ? İşte o zaman işin içine parametreler giriyor. Şimdi metodumuzu parametreli olarak tekrar yazalım;

private void Topla(int x, int y)
{
int z = x + y;
}

Bu metodu şu şekilde çağırıyoruz;

Topla(5, 3);   // 5 ile 3' ü toplar.

FONKSİYON OLUŞTURMA VE ÇAĞIRMA

Parametreli metot oluşturduk, şimdi de toplam sonucu Textbox' ta nasıl görüntüleriz buna bakalım.

  • Bunun için metot yerine geriye değer döndüren fonksiyon kullanmalıyız. 
  • Metotlar geriye değer döndürmez ve void ile tanımlanırlar. 
  • Fonksiyonlar isegeriye değer döndürürler ve döndürdükleri değerin veri tipiyle tanımlanırlar.
private int Topla(int x, int y)
{
int z = x + y;
return z;
}

Burada geriye döndürdüğümüz değer toplama işleminin sonucu olan z değişkenidir. z değişkeninin veri tipini int olarak tanımladığımız için Topla isimli fonksiyonumuzu da int tipinde tanımlıyoruz.

  • Eğer metottaki elde ettiğimiz veriyi veya sonucu, o metot dışında herhangi bir dğeişkene veya nesneye atayacaksak fonksiyon kullanmalıyız. 
Fonksiyon şu şekilde çağırılır;

int ToplamaSonucu = Topla(5, 3);

Burada Topla fonksiyonunda toplama sonucu olan geri döndürdüğümüz z değişkeni, Toplama sonucu isimli değişkene atanıyor. Yani ToplamaSonucu değişkenin değeri 8 olacaktır.

TextBox1 isimli metin kutusuna toplama sonucu şu şekilde yazdırabiliriz;

TextBox1.text = Topla(5, 3).ToString();

Text alanımız string tipinde olduğu için int tipindeki Topla donksiyonunu ToStrin() ile stringtipine dönüştürüyoruz.

Sonuç olarak metodun değer döndüren haline fonksiyon diyoruz. Metot yazarken void anahtar kelimesi kullanılır. Fonksiyonda ise void yerine geriye döndürülen değerin veri tipi yazılır (int, byte, short, string, bool vesaire...)

12 Nisan 2013 Cuma

Raid 5

Raid, sistem güvenliği yani hard disk veri depolarının güvenliğini sağlamak amaçlı geliştirilmiş yapının adıdır.. Günümüz teknolojisinin hızla gelişmesi bu yönde güvenlik birimlerinin de sağlamlaştırılmasını gerektirmektedir. Bu sebeple raid ile hard disk veri algoritmaları yapılarak en güzel güvenlik gereksimini karşılanması hedeflenmektedir.

4 Nisan 2013 Perşembe

Şifreler ve SHA1

Veritabanına üye kaydı yaparken kullanıcının şifresini kriptolayarak veritabanına kaydetmek en mantıklısıdır. Bu sayede veritabanına ulaşma yetkisine sahip olan bir admin bile kullanıcların şifrelerine erişemez. örneğin üye şifresini 12345 olarak belirlerse, bu şifre veritabanına SHA1 sayesinde 51EAC6B471A284D3341D8C0C63D0F1A286262A18 gibi bir ifade olarak kayıt edilir.

Bunun için sayfamıza using.System.Web.Security namespace' ini eklememiz gerekir.

Bunun nasıl olduğuna bakalım, ben entity framework kullandım ama konumuz olan SHA1 kullanımında bir farklılık yok;


  • Normal kayıt: sifre = txtPassword.Text;  // bu satır veritabanına aynen 12345 olarak kaydedilir.
  • SHA1: sifre = FormsAuthentication.HashPasswordForStoringInConfigFile(txtSifre.Text, "SHA1")



3 Nisan 2013 Çarşamba

Entity Framework ile UPDATE


DenemeEntities2 entity = new DenemeEntities2();
Uye updateUye = entity.Uye.Where(u => u.userid == userid).FirstOrDefault();
updateUye.ad = txtAd.Text;
updateUye.soyad = txtSoyad.Text;
updateUye.kullaniciadi = txtKullaniciAdi.Text;
updateUye.sifre = txtSifre.Text;
updateUye.cinsiyet = ddlCinsiyet.SelectedValue;
entity.SaveChanges();
Response.Redirect("Default.aspx");

Bu kodları denedim denedim çalışmadı. Çözümü ise

if(!IsPostBack)
{
       Page_Load içindeki kodlar buraya gelecek.
}

yukarıdaki gibi Page_Load içindeki kodları IsPostBack kontrolü içine yazarak buldum.