Listboxdaki ürünlerin tutarlarını hesaplama

Başlatan baran123, 25 Haziran 2014, 01:29:01

baran123

Yapmakta olduğum projede yine takıldığım bir nokta mevcut :| (zaten ne zaman yok ki) textbox'a varkod giriyorum Veri tabanından ürün çekiyorum araya ':' atarak bunu işlem yaparken split ile ayırıyorum 1 indexini alıp numeric deki sayıyla(adet ile) alıp çarpıyorum hop listboxa ekleniyor okey ama yeni bir ürün eklediğimde öncekinin tutarıyla hesaplatamadım yeniyimde daha bir el atarsanız çok makbule geçer :|

void Hesapla()
        {
            decimal adet = Convert.ToDecimal(numericUpDown1.Value);
            string[] a;
            decimal tutar = 0;

            con.Open();
            int barkod = Convert.ToInt32(txtBarkod.Text.Trim());
            OleDbCommand cmd = new OleDbCommand("Select * From Urunler Where Barkod=@barkod", con);
            cmd.Parameters.Add("@barkod", OleDbType.Integer).Value = barkod;
            OleDbDataReader dr = cmd.ExecuteReader();           

            if (dr.Read())
            {
                
                if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
                {
                    decimal fiyat = Convert.ToDecimal(dr["Fiyat"]);
                    listBox1.Items.Add(dr["Ad"].ToString() + ":" + dr["Indirim"] + ":" + "x" + ":" + numericUpDown1.Value.ToString());
                    for (int i = 0; i < listBox1.Items.Count; i++)
                    {
                        a = listBox1.Items[i].ToString().Split(':');
                        tutar = tutar + decimal.Parse(a[1]) * decimal.Parse(a[3]);
                    }
                }
                else
                {
                    decimal fiyat = Convert.ToDecimal(dr["Fiyat"]);
                    listBox1.Items.Add(dr["Ad"].ToString() + ":" + dr["Fiyat"] + ":" + "x" + ":" + numericUpDown1.Value.ToString());
                    for (int i = 0; i < listBox1.Items.Count; i++)
                    {
                        a = listBox1.Items[i].ToString().Split(':');
                        tutar = tutar + decimal.Parse(a[1]) * decimal.Parse(a[3]);
                    }
                }
            }
            con.Close();
            txtBarkod.Clear();
            txtBarkod.Focus();
            lblTutar.Text = "Tutar :" + tutar.ToString("C");
        }

barisertekin

Globalization kaynaklı olarak başka windowslarda DayOfWeek fonksiyonu ingilizce olarak "Saturday" vermeyebilir ve programının hatalı çalışılır. Mesela "Cumartesi" gelebilir. Rusça "суббота" gelebilir :)

if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday){ } else{}

baran123


barisertekin

Asıl sorunun cevabını kendin bulmalısın. Breakpoint kullanmayı biliyor musun? Debug et bakalım iki nokta karakterinden ayırıyor ama ne oluyor. Sorun nerede? Kodu takip et adım adım.

Breakpoint Kullanımı

baran123

Çözdüm arkadaşlar teşekkürler :) debug yaparak buldum sorunu.Kodu Düzelttim

barisertekin

Bu ilk projeniz sanırım. İyi gidiyorsunuz fakat bu yazdığınız kod dünyanın en kötü kodu yarışmasında ön sıralarda yer alır :)

Bu proje tecrübe olmuş olsun. Bir daha yeni bir projeye başlarken katmanlı mimari ve object oriented ile yapmaya çalışın. O gün geldiğinde tekrar yardımcı olurum.

Kolay gelsin.

baran123

Biliyorum çok kötü kod yazıyorum :D zar da zorda olsa uzun da olsa bir iki şey öğrenerek gelişmeye başladım :)