none
c# if else

    Soru

  • merhaba arkadaşlar yazdığım kodda bi türlü anlayamadığım bi olay var 

    if else döngüsünün benzerini yukarıda kullanıyorum daha sonra aynı if else döngüsünü aşağıda kullanıyorum başka bi event de birinde dongüye giriyor diğerinde girmiyor.

       for (int k = 0; k < x; k++)
                {
                    if (15 < Convert.ToDouble(dataGridView_cihaz[4, k].Value) && dataGridView_cihaz[3, k].Value.ToString() == "0")
                    {
                        toplam4 += (ortalama3 - Convert.ToDouble(dataGridView_cihaz[4, k].Value)) * (toplam3 - Convert.ToDouble(dataGridView_cihaz[4, k].Value));
                        z++;
                    }
    
                }

    private void button3_Click(object sender, EventArgs e)
            {
                int sayı = dataGridView_cihaz.RowCount;
               
                //bag.Open();
                //komut.Connection = bag;
                for (int p = 0; p < x; p++)
                {
                    try
                    {
                        if (15.0 < Convert.ToDouble(dataGridView_cihaz[4, p].Value) && dataGridView_cihaz[3, p].Value.ToString() == "0")
                        {
                            z_skor = ((Convert.ToDouble(dataGridView_cihaz[4, p].Value) - ortalama3) / standart);
                            t_skor = 60 + z_skor * 10;

    mesela bu kodda if e girmiyor ?? 

    28 Mart 2013 Perşembe 12:53

Yanıtlar

  • Yorumlayalım: Gördüğüm kadarıyla, veritabanında bir güncelleme yapıyorsun ama bunun için where koşulu kullanmıyorsun. Şu ifade;

    "UPDATE  Cihaz set harf_notu=@harf_notu"

    bir koşul içermiyor. Sen diyorsun ki harf_notu alanını @harf_notu yap. Hangi alana yapılacak bu güncelleme, belirtmediğin için tutup son öğrencinin notu, tüm sütunlara atılıyor. Yani if yapın doğru olsa bile bu söz dizimi sürekli hata yaptığını düşündürecek ve sen if kısmına odaklanacaksın. Bu bir.

    İkincisi, bu güncelleme işi için veritabanını kullanabilirsin. Veritabanında mssql kullandığını varsayarak şöyle bir yapı, senin formda grid üzerinde yapmaya çalıştığının hepsini yapar.

    Update tablom
    set notu = CASE 
    WHEN (puan > 0 AND puan < 10) THEN 'AA' 
    WHEN (puan > 10 AND puan < 20) THEN 'BB'  
    WHEN (puan > 20 AND puan < 30) THEN 'CC' 
    END

    Ben anlamam if'lerimle mutluyum, doğru düzgün çalışsın dersen, bu döngünün hata olasılığı çok yüksek. Biraz daha sempatiği foreach olur. Onda sütun, satır indexi karıştırma ihtimalin daha düşük. if de nispeten kolay olacaktır.

                //bag.Open();
                //komut.Connection = bag;
                //komut.CommandText = "UPDATE  Cihaz set harf_notu=@harf_notu where ogrencino=@ogrencino";
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string harf = "";
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    //komut.Parameters.Clear(); //başka yerde parametre ekleme durumuna karşı temizle
                    //komut.Parameters.AddWithValue("@harf_notu", harf);
                    //komut.Parameters.AddWithValue("@ogrencino", row.Cells[0].Value);
                    //komut.ExecuteNonQuery();
                }
                //bag.Close();

    Sql mantığını da açıklama satırı olarak verdiğim gibi olmalı.
    29 Mart 2013 Cuma 20:20
    Moderatör

Tüm Yanıtlar

  • if else bir döngü değildir şartlı kontrol dür. for döngüdür. bu arada değerlerini kontrol et db den gelen verilere göre işlem yap kontrolünde(ifde) yapmak istediğin nedir? benim anladığım kadarıyla hem gelenveri 15 ten büyük olacak hemde 3. row un p değeri boş olacak bunları sağlarsa işlemleri yapsın gibisinden bişey heralde de orada neden Value.ToString()=="0" kullandın onun yerine Value==0 yaz daha mantıklı

    Blog Sayfam

    28 Mart 2013 Perşembe 14:04
    Moderatör
  • orada 4. sütündaki veri 15 den büyükse ve 3. sütündaki değer 0 a eşitse if içine girsin diye yaptım ama hep else kısmına giriyor.
    28 Mart 2013 Perşembe 16:42
  • dediğim gibi yap 

    dataGridView_cihaz[3, p].Value.ToString() == "0"

    bunun yerine

    dataGridView_cihaz[3, p].Value==0

    yaz bir dene


    Blog Sayfam

    28 Mart 2013 Perşembe 16:48
    Moderatör
  • dediğiniz gibi yaptım o kısım çalışıyor ancak başka bir yerde  hata var sanırım  .
    28 Mart 2013 Perşembe 17:04
  • Diğer posta yazdım. Buradan da sorayım, bu if'li yapıyı bir tarafa bırakalım, amaç veritabanından bulunan notlara göre sonuç hesaplayıp veritabanına yazmak mı?
    28 Mart 2013 Perşembe 18:15
    Moderatör
  • dataGridView_cihaz[4, p]

    Burada 4 ile p nin yerleri yanlış. sen her bir satır için 3. ve 4. kolonları kontrol etmeye çalışıyorsun ama kodun gidiyor 3. ve 4. satırların p inci sütunlarını kontrol ediyor. yer değiştir p ler başta olacak..


    Burak SARICA

    28 Mart 2013 Perşembe 19:57
  • evet hocam temel amacım bu ben bunu datagridview deki verileri kullandırarak yapmaya çalışıyorum.
    29 Mart 2013 Cuma 19:51
  • nasıl hocam ? benim amacım her satırdaki 4.sütünu 15 den büyükse ve 3.sütunu 0 a eşitse if içine girsin.
    29 Mart 2013 Cuma 19:55
  • Yorumlayalım: Gördüğüm kadarıyla, veritabanında bir güncelleme yapıyorsun ama bunun için where koşulu kullanmıyorsun. Şu ifade;

    "UPDATE  Cihaz set harf_notu=@harf_notu"

    bir koşul içermiyor. Sen diyorsun ki harf_notu alanını @harf_notu yap. Hangi alana yapılacak bu güncelleme, belirtmediğin için tutup son öğrencinin notu, tüm sütunlara atılıyor. Yani if yapın doğru olsa bile bu söz dizimi sürekli hata yaptığını düşündürecek ve sen if kısmına odaklanacaksın. Bu bir.

    İkincisi, bu güncelleme işi için veritabanını kullanabilirsin. Veritabanında mssql kullandığını varsayarak şöyle bir yapı, senin formda grid üzerinde yapmaya çalıştığının hepsini yapar.

    Update tablom
    set notu = CASE 
    WHEN (puan > 0 AND puan < 10) THEN 'AA' 
    WHEN (puan > 10 AND puan < 20) THEN 'BB'  
    WHEN (puan > 20 AND puan < 30) THEN 'CC' 
    END

    Ben anlamam if'lerimle mutluyum, doğru düzgün çalışsın dersen, bu döngünün hata olasılığı çok yüksek. Biraz daha sempatiği foreach olur. Onda sütun, satır indexi karıştırma ihtimalin daha düşük. if de nispeten kolay olacaktır.

                //bag.Open();
                //komut.Connection = bag;
                //komut.CommandText = "UPDATE  Cihaz set harf_notu=@harf_notu where ogrencino=@ogrencino";
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string harf = "";
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    if ((double)row.Cells[3].Value > 10 && (double)row.Cells[4].Value < 20) { harf = "AA"; }
                    //komut.Parameters.Clear(); //başka yerde parametre ekleme durumuna karşı temizle
                    //komut.Parameters.AddWithValue("@harf_notu", harf);
                    //komut.Parameters.AddWithValue("@ogrencino", row.Cells[0].Value);
                    //komut.ExecuteNonQuery();
                }
                //bag.Close();

    Sql mantığını da açıklama satırı olarak verdiğim gibi olmalı.
    29 Mart 2013 Cuma 20:20
    Moderatör