C#'da iki adet combox arasındaki verileri alma ve veritabanına kaydetme işlemi nasıl yapılır?

0

Arkadaşlar Merhaba,

Uzmanim.Net editörlerin'den ve kurucularından olan Alaattin Bey'in yapmış olduğu sistemi sizlerle paylaşmak istiyorum.

Formumuz'da iki adet combox ve bir adet datatimepicker nesnelerimiz var.

Veritabanımız ise şöyle: Veritabanı adı: emocan , Tablo adı: Rezerve , Kolonlar ise saat(Nvarchar50) ve Tarih(Date) şeklinde olacak.

Kısaca şöyle bahsedeyim. İki adet combox'larımız var ve bu iki comboxlar'da ise saat itemlerimiz var. Yapmaya çalıştığımız şey ise iki comobox'da da aynı şekilde 11:00 12:30 13:00 gibi değerler olsun yani biz combox1'den 11:00'i comobox2'den ise 13:00'i seçtip kaydet butonuna bastığımızda  arasında kalan 12:30 saati de dahil  yapacağımız sistemimiz otomatik olarak veritabanımıza 11:00 - 13:00 arasında kaydediyor ve Form her açıldığında comoboxları kontrol ederek 11:00 - 13:00 arasında kalan itemleri iki comobox'da da üzeri çizgili olarak gösteriyor ve üstüne tıklanamıyor. Sistem bu şekilde arkadaşlar. Bunu nasıl yaptığımızı aşşakidaki cevap bölümünde bulabilirsiniz.

notify notify (538)
8 yıl önce sordu

    Toplam 1 Cevap


    0

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    namespace emocan
    {
        public partial class Form2 : Form
        {
            string baglantiCumlesi = "server=.\\SQLEXPRESS; database=emocan; integrated security=SSPI";
            List<string> RezerveSaatler;
            public Form2()
            {
                InitializeComponent();
                this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
                this.comboBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.comboBox1_DrawItem);
                this.comboBox2.DrawMode = DrawMode.OwnerDrawFixed;
                this.comboBox2.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.comboBox2_DrawItem);
    
    
            }
            private void Form2_Load(object sender, EventArgs e)
            {
                RezerveSaatler = GetirRezerveSaatler();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                SaatKaydet();
    
    
              //  bool flag = false;
                //foreach (var i in comboBox2.Items)
                //{
                //    if (i.ToString() == t1)
                //        flag = true;
                //    if (flag)
                //    {
                //        if (!DahaOnceRezerveEdilmisMi(i.ToString()))
                //            SaatKaydet(i.ToString());
                //        else
                //        {
                //            MessageBox.Show("Bu saat daha önce rezerve edilmiş");
                //        }
                //    }
                //    if (i.ToString() == t2)
                //        flag = false;
                //}
    
            }
    
            Font myFont = new Font("Arial", 10, FontStyle.Underline | FontStyle.Regular);
            Font myFont2 = new Font("Arial", 10, FontStyle.Italic | FontStyle.Strikeout);
    
            private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                string saat = comboBox1.Items[e.Index].ToString();
                if (RezerveSaatler.Contains(saat))
                {
                    e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), myFont2, Brushes.LightSlateGray, e.Bounds);
    
    
                }
                else
                {
                    e.DrawBackground();
                    e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), myFont, Brushes.Black, e.Bounds);
                    e.DrawFocusRectangle();
                }
    
    
            }
            private void comboBox2_DrawItem(object sender, DrawItemEventArgs e)
            {
                string saat = comboBox2.Items[e.Index].ToString();
                if (RezerveSaatler.Contains(saat))
                {
                    e.Graphics.DrawString(comboBox2.Items[e.Index].ToString(), myFont2, Brushes.LightSlateGray, e.Bounds);
    
    
                }
                else
                {
                    e.DrawBackground();
                    e.Graphics.DrawString(comboBox2.Items[e.Index].ToString(), myFont, Brushes.Black, e.Bounds);
                    e.DrawFocusRectangle();
                }
    
    
            }
    
    
            void SaatKaydet()
            {
                var t1 = comboBox1.SelectedItem.ToString();
                var t2 = comboBox2.SelectedItem.ToString();
                var saat = t1 + "-" + t2;
                SqlConnection baglanti = new SqlConnection(baglantiCumlesi);
                SqlCommand komut = new SqlCommand("Insert Into Rezerve (Saat,Tarih) Values (@prmSaat,@prmTarih)", baglanti);
                komut.Parameters.AddWithValue("@prmSaat", saat);
                komut.Parameters.AddWithValue("@prmTarih", dateTimePicker1.Value);
                baglanti.Open();
                komut.ExecuteNonQuery();
                baglanti.Close();
            }
            bool DahaOnceRezerveEdilmisMi(string saat)
            {
                SqlConnection baglanti = new SqlConnection(baglantiCumlesi);
                SqlCommand komut = new SqlCommand("Select count(*) from Rezerve Where Saat=@prmSaat", baglanti);
                komut.Parameters.AddWithValue("@prmSaat", saat);
                baglanti.Open();
                int sonuc = (int)komut.ExecuteScalar();
                baglanti.Close();
                if (sonuc == 0)
                    return false;
                else
                    return true;
            }
    
            List<string> GetirRezerveSaatler()
            {
                List<string> rezerveler = new List<string>();
                
                using (SqlConnection connection = new SqlConnection(baglantiCumlesi))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand("SELECT Saat from Rezerve Where Tarih=@prmTarih", connection))
                    {
                        command.Parameters.AddWithValue("@prmTarih", dateTimePicker1.Value.Date);
                        string saatAraligi = (string)command.ExecuteScalar();
                        if (!string.IsNullOrEmpty(saatAraligi))
                        {
                            string[] saatAraligiArray = saatAraligi.Split('-');
                            var baslangicSaati = saatAraligiArray[0];
                            var bitisSaati = saatAraligiArray[1];
                            bool flag = false;
                            foreach (var i in comboBox1.Items)
                            {
                                if (i.ToString() == baslangicSaati)
                                    flag = true;
                                if (flag)
                                    rezerveler.Add(i.ToString());
                                if (i.ToString() == bitisSaati)
                                    flag = false;
                            }
                        }
                    }
                }
                return rezerveler;
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex != -1)
                {
                    if (RezerveSaatler.Contains(comboBox1.SelectedItem.ToString()))
                        comboBox1.SelectedIndex = -1;
                }
    
    
            }
    
            private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox2.SelectedIndex != -1)
                {
                    if (RezerveSaatler.Contains(comboBox2.SelectedItem.ToString()))
                        comboBox2.SelectedIndex = -1;
                }
    
            }
    
            private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
            {
                RezerveSaatler = GetirRezerveSaatler();
            }
    
    
    
    
    
    
        }
    }
    

     

    notify notify (538)
    8 yıl önce cevaplandı

    • @alattin abi bunun aynısını c# için değilde asp.net'e çeviriyorum ama tabi uyuşmuyor. Örneğin: C#'daki combox'daki DrawItem'i dropdownlist'te bulamadım. notify 7 yıl önce
    • @notify asp.net'te başka bir yaklaşımla çözmek lazım. bir bakayım buna alattin 7 yıl önce
    • @alattin abi suc bende en baştan desktop mu web formu olacağına karar versem bu tür sıkıntılar çıkmayacakdi. bide bu sorun çıktı sorun üstüne sorun çıkıyor notify 7 yıl önce
    üyelik gerektirir

    Cevap yazabilmek için üye girişi yapmalısınız.

    Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
    uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol