Asp.Net DropDownList'de ki veriyi db'ye istediğim şekilde kaydedemiyorum

0

Merhaba;

Aşağıda ki kodlar, db de ki saatler de eğer saat aralığı seçilmiş ise iki adet DropDownList'te seçilemez yapıyor. Seçilebilir olan saatleri'de db'ye kaydediyorum fakat DropDownList'te hangi saat aralığını seçersem seçeyim db'ye 09:00-09:00 şeklinde kaydediyor. Yani en başta bulunan saati. Kodlar ise şöyle;

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default3 : System.Web.UI.Page
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        List<string> saatler = new List<string> { "09:00", "09:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30" };
        DropDownList1.DataSource = saatler;
        DropDownList2.DataSource = saatler;
        DropDownList1.DataBind();
        DropDownList2.DataBind();
    }
    List<string> GetirRezerveSaatler(DateTime tarih)
    {
        List<string> rezerveler = new List<string>();
        string baglantiCumlesi = "server=DESKTOP\\EMRULLAH; database=emocan; integrated security=SSPI";

        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", tarih.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 DropDownList1.Items)
                        {
                            if (i.ToString() == baslangicSaati)
                                flag = true;
                            if (flag)
                                rezerveler.Add(i.ToString());
                            if (i.ToString() == bitisSaati)
                                flag = false;
                        }
                    }
                }
            }
        return rezerveler;
    }
    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
            var seciliTarih = Calendar1.SelectedDate;
            var rezerveSaatler = GetirRezerveSaatler(seciliTarih);
            for (int i = 0; i < DropDownList1.Items.Count; i++)
            {
                if (rezerveSaatler.Contains(DropDownList1.Items[i].Text))
                    DropDownList1.Items[i].Attributes.Add("disabled", "disabled");
            }
            for (int i = 0; i < DropDownList2.Items.Count; i++)
            {
                if (rezerveSaatler.Contains(DropDownList1.Items[i].Text))
                    DropDownList2.Items[i].Attributes.Add("disabled", "disabled");
            }
        }

    protected void Button1_Click(object sender, EventArgs e)
    {
            string baglantiCumlesi = "server=DESKTOP\\EMRULLAH; database=emocan; integrated security=SSPI";
            SqlConnection baglanti = new SqlConnection(baglantiCumlesi);

            SqlCommand komut = new SqlCommand("Insert Into Rezerve (Saat,Tarih) Values (@p1,@p2)", baglanti);

            SqlParameter p1 = new SqlParameter();
            p1.ParameterName = "@p1";
            p1.Value = DropDownList1.SelectedItem.Text + "-" + DropDownList2.SelectedItem.Text;
            komut.Parameters.Add(p1);

            SqlParameter p2 = new SqlParameter();
            p2.ParameterName = "@p2";
            p2.Value = Calendar1.SelectedDate;
            komut.Parameters.Add(p2);
            baglanti.Open();
            if (baglanti.State == ConnectionState.Closed)
            {
                baglanti.Open();
            }

            komut.ExecuteNonQuery();

        }
    }

@alattin abi bunu dahi soruyorum fakat postaback kodları ekleyerek de denedim bu sefer kaydediyor fakat çekmiyordu. En sonunda buraya yazıyorum.

Düzenleme:

Kodlarımın ilgili yerini şu şekilde düzenleyip tekrar denedim böyle'de olmadı @alattin abi.

        SqlConnection baglanti = new SqlConnection(baglantiCumlesi);

        SqlCommand komut = new SqlCommand("Insert Into Rezerve (Saat,Tarih) Values (@p1,@p2)", baglanti);

        baglanti.Open();

        komut.Parameters.AddWithValue("@p1", DropDownList1.SelectedItem.Text + "-" + DropDownList2.SelectedItem.Text);
        komut.Parameters.AddWithValue("@p2", Calendar1.SelectedDate);
        komut.ExecuteNonQuery();

 

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

  • asıl sorun bu @alattin abi diğerlerini bir şekilde halletim ama bu saatleri kaydediyorum bu sefer yanlış çekiyo, daha sonra doğru çektiriyorum bu seferde yanlış kaydediyo. İkisi arasında bağlantıyı tuturamadım bir türlü abi :) notify 6 yıl önce

Toplam 1 Cevap


0

Öncelikle mutlaka Page_Load olayında Page.IsPostBack kontrolü yapmalısın.

 protected void Page_Load(object sender, EventArgs e)
    {
        List<string> saatler = new List<string> { "09:00", "09:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30" };
        if (!Page.IsPostBack)
        {
            DropDownList1.DataSource = saatler;
            DropDownList2.DataSource = saatler;
            DropDownList1.DataBind();
            DropDownList2.DataBind();
        }


    }

Kodunda sadece bu değişikliği yapman yeterli oluyor. Test ettim, hem kaydediyor hem de rezerve saatleri getiriyor.

alattin alattin (16984)
6 yıl önce cevaplandı

    ü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