24 Mart 2016 Perşembe

Web API'den Json Tipinde Veri Çekmek ve Kullanmak

Nihayet bu konu da aydınlandı... Elimde bir APIm var. İhtiyacım oldukça bu apiye metod yazarak dışarıdan erişiyorum. Önce API kısmına bakayım sonra da Client tarafı gelecek. Hazırladığım metod bana bir liste dönüyor. Bunun İçin metodun başına [HttpGet] koymak şart! Veya metod isminin başına Get koyularak da ayapılabiliyor. (Örneğin metodun adı Events ise bunu GetEvents olarak değiştirdiğimde metodun başına [HttpGet] Attribute'ünü koymaya gerek kalmıyor.)



API tarafınfa şimdilik iki metot var, bunlar aşağıdaki gibidir.



Şimdi gelelim client tarafında bu metotu kullanmaya.


Ekran görüntüleri herşeyi açıklıyor :)

11 Mart 2016 Cuma

2016 ve 10 Teknolojik Atılım

themt.co sitesinden alıntıdır :)

Bağışıklık Sistemi Mühendisliği

Genetik yönden değiştirilmiş bağışıklık sistemi hücreleri kanser hastalarının hayat kurtarıyor. Bu sadece bir başlangıç olabilir!
Bağışıklık Sistemi Mühendisliği

Tam olarak genleri ile oynanmış bitkiler

CRISPR sunduğu yöntemle kolaylıkla genler değiştirilerek, hastalığa direnç gösterme ve susuzluk toleransı gibi özellikler oluşturulabiliyor
Tam olarak genleri ile oynanmış bitkiler

Konuşabilen Arabirimler

Çin’in lider internet şirketinden güçlü konuşma teknolojisi ve bu teknoloji akıllı telefonların kullanımını daha da kolaylaştırıyor
Konuşabilen Arabirimler

Tekrar Kullanılabilir Roketler

Tipik olarak roketler yolculuğu sıralarında yok edilirler. Ama artık bu roketler karaya tekrar iniş yapabilecekler ve yakıt ikmali, ayarlamalar gibi şeyler yapıldıktan sonra bir sonraki yolculukları için hazır hale gelecekler.
Tekrar Kullanılabilir Roketler

Diğer Hemcinslerinden Bir Şeyler Öğrenebilen Robotlar

Peki ya robotlar diğerlerinin bildiği ve paylaştığı bilgilerinden bir şeyler öğrenebilseydi?
Diğer Hemcinslerinden Bir Şeyler Öğrenebilen Robotlar

DNA Uygulama Mağazası

Bir çevrim içi mağaza, hem de genetik bilgilerinizin bulunduğu bir mağaza. Bu mağaza hastalık risklerinizi ve meyillerinizi ucuz ve kolayca öğrenebilir.
DNA Uygulama Mağazası

SolarCity’nin Devasa Fabrikası

Buffalo’daki 750 milyon dolarlık bir güneş enerjisi sistemi, sahip olduğu yüksek verimli güneş panelleri sayesinde her yol gigawatt değerinde enerji sunabilir.
SolarCity’nin Devasa Fabrikası

Tesla Otomatik Pilot

Elektrikli araç üreticiniz, aracınıza sessizce göndereceği bir yazılım güncellemesiyle arabanızı kendi kendine sürebilen otonom bir sisteme çevirebilir.
Tesla Otomatik Pilot

Havadan Güç!

Wi-Fi gibi ve diğer iletişim teknolojilerinin yaydığı sinyallerle beslenen internet aygıtları küçük bilgisayarları ve algılayıcıları daha yaygın hale getirebilir.

10 Mart 2016 Perşembe

XML Data Source Add To Sql Server (Xml Veri Kaynağını Sql Server'a Tablo Yapısında Eklemek)

Sevdiğimiz bir hocamızın ihtiyacına binaen elindeki xml veriyi sql'e eklememiz gerekti. Yapılan işlemler aşağıdaki gibidir. :)



1. Örnek xml dosyası aşağıdaki gibidr. Elimdeki xml'de bu şekilde 12 adet book nesnesi var.



2. Sql Server'da XMLwidthOpenXML adında yeni bir tablo oluşturuyorum. Tablonun yapısı aşağıdaki gibidir.


3. Sırada xml dosyasındaki verileri bu tabloya atmak var. Bu işlemi aşağıdaki kod yardımıyla yapıyoruz.




4. Yukarıdaki kodu çalıştırdığımızda ekranda aşağıdaki gibi bir görünüm olmalıdır.



5. Xml dosyasında 12 adet book nesnesi var fakat burada tek satır var diye düşünmeyin. Sıra geldi bunu halletmeye :) XMLData sütunundaki hyperlinke tıkladığımızda bize xml dosyasımız olduğu gibi gösterir. Şimdi xml dosyasının içindeki verileri sql satırı olarak çekelim.



6. Yukarıdaki kodun çıktısı aşağıdaki gibi olmalıdır.



7. Artık buradan sonra iş kullanıcıya kalmış :) Bu satırları excel'e çekebilirsiniz veya Cursor kullanarak istediğiniz işlemleri yapabilirsiniz. Kolay Gelsin.

Anı Yaşamak

“Dünyada ölüm diye bir gerçek varken, sevdiğiniz kişinin hala nefes aldığına dua edin, akşam eşinizin, annenizin kapıyı açmasına şükredin. Ne bileyim, bi silkelenin. Kıymet bilin, sevin. Severken incitmeyin. Kibir yapıp gitmesine izin vermeyin. Gün gelir öyle kayıp gider ki o eller avuçlarınızdan, feleğiniz şaşar, dünyanız durur. Derler ki hayat devam ediyor. Ama öyle kolay olmaz. Önce gülüşünüz kaybolur, sonra neşeniz. Siz siz olun şu boş hayatta hiçbir şey için karalar bağlamayın. Özlemekten ciğeriniz solmadan soluğu yanında alın, sarılın… Teni hala sıcakken sarılın..."

Sql Server Cursor Kullanımı

Sql Server'da Cursor kullanımı genel olarak aşağıdaki gibidir.
DECLARE @NAME NVARCHAR(100)
DECLARE @EMAIL NVARCHAR(200)

DECLARE CRS_KISIEKLE CURSOR FOR
   SELECT DISTINCT 
   ks.Ad
   FROM 
   WL_SN_VW_COURSE as cs INNER JOIN
   WL_SN_ST_COURSEMAP as cm ON cs.COURSEID=cm.COURSEID INNER JOIN
   [IP].uysv2.dbo.OGROgrenciYazilma as st on st.FKDersPlanID=cm.COURSEKEY INNER JOIN
   [IP].uysv2.dbo.OGRKimlik AS og ON st.FKOgrenciID=og.ID INNER JOIN
   [IP].uysv2.[dbo].[Kisi] AS ks ON ks.ID=og.[FKKisiID] LEFT OUTER JOIN
   [IP].uysv2.[dbo].[Nufus] AS nf ON nf.ID=ks.[FKNufusID] INNER JOIN
   [IP].[uysv2].[dbo].[Birimler] AS dp ON og.[FKBolumPrBirimID]=dp.ID  LEFT OUTER JOIN
   WL_SN_ST_USER as us ON CAST(og.ID as nvarchar(50))=us.STUDENTKEY 
      WHERE cs.COURSEID='0901adc9-1660-437c-8790-e0a3bc2eaa49' AND og.EnumOgrDurum = 2
   GROUP BY og.Numara,ks.TC,ks.Ad,ks.Soyad,nf.[ENUMCinsiyet],nf.[DogumTarihi],og.Numara,dp.ID,ks.TC,og.ID,KullaniciAdi

OPEN CRS_KISIEKLE
FETCH NEXT FROM CRS_KISIEKLE INTO @NAME
WHILE @@FETCH_STATUS =0
 BEGIN
  --------
  INSERT INTO TESTTEST (NAME) VALUES(@NAME)

  FETCH NEXT FROM CRS_KISIEKLE INTO @NAME
 
 END

CLOSE CRS_KISIEKLE

DEALLOCATE CRS_KISIEKLE





9 Ekim 2013 Çarşamba

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.