none
C#'da sql veritab anında kaydettiğim yan yana saatleri combox'a çekme RRS feed

  • Genel Tartışma

  • Arkadaşlar Merhaba,

    C#'da formumda iki adet combobox var bunlarda ise saatler var 10:00 11:30 gibi.. Birde veritabanım var saatler adında ise kolonum bu bahsettiğim saatleri combox'da seçip butona basınca veritabanına kaydediyor ve combox'dan silmiş oluyor. Buraya kadar bir sıkıntı yok ama benim beceremediğim nokta şu; Veritabanına kaydederken satır satır(yani alt alta) 10:00 11:00 12:00 gibi kaydetmek yerine 10:00 - 12:00 arasın da kaydetsem ve çekerken o arada kalan 11:00'ı da çekersem çok iyi olucak hem fazla yer kaplamayacak hemde başka kolonlarıda rahat bir şekilde kullanabilicem. Çok sevdiğim bir abimin yardımıyla bu noktaya kadar gelebildim. Ama gerisini yani tam benim istediğim şekilde olmadı. 3 saatir uğraşmama rağmen gram ilerleyemedim. Nasıl bıraktıysa öyle kaldı yardımcı olabilecek hocalarım varsa team id verebilirim. Yarımcı olabilirseniz çok sevinirim

    23 Ağustos 2016 Salı 17:59

Tüm Yanıtlar

  • Burda ciddi bir sıkıntı var sen bir combo boxtan 10 seçiyorsun ikinciden 13 ü kaydete basınca combodan diyelim ki 10 11 12 13 saatleri siliniyor ve sen o saatlerin seçilemeyeceğini düşünüyorsun. Peki 9 u ve 14 ü seçerseler ne olacak arada ki saatleri sistem kullanıldığını bilecek mi? Burada ki mantığı anlayamadım

    Fullstack Developer

    23 Ağustos 2016 Salı 18:07
  • Evet, yaptığımız sistem algılıyor. Birdaha o saatleri seçtirmiyor.
    23 Ağustos 2016 Salı 18:13
  • Bu is icin combobox kullanilacak kontrol olmayabilir, ama madem kullanmissin, neden 2 tane kullanmiyorsun, baslangic ve bitis olarak. Baslangic secilince, digerinde en kucuk deger olarak baslangic degerini kullanabilirsin, ama onu yapmana bile degmez.
    23 Ağustos 2016 Salı 18:56
    Yanıtlayıcı
  • Bu is icin combobox kullanilacak kontrol olmayabilir, ama madem kullanmissin, neden 2 tane kullanmiyorsun, baslangic ve bitis olarak. Baslangic secilince, digerinde en kucuk deger olarak baslangic degerini kullanabilirsin, ama onu yapmana bile degmez.
    Çetin abi zaten iki tane combox kullandım.
    24 Ağustos 2016 Çarşamba 06:00
  • Bir fikri olan yok mu 
    24 Ağustos 2016 Çarşamba 11:03
  • 11 zaten 10 ile 13 arasında değil mi yani nasıl combobox ta bunun arada olduğunu biliyorsa program başka yerde de bilir. Ne yapmaya çalıştığından birşey anlamadım.

    Fullstack Developer

    24 Ağustos 2016 Çarşamba 11:06
  • En baştan anlatayım o zaman;

    Şimdi yapmaya çalıştığım şey (daha doğrusu yaptığım) Formumda iki adet combox var bu comoboxlarda ise veritabanından saatleri çekiyorum 11:00 12:30 gibi... İki ocmbobxlarda da aynı saatler var birinci comboxtan 11:00'ı seçtim diyelim ikinci comboxdan ise 13:00'ı seçtim. Buraya kadar tamam bundan sonrası ise bu ikisi arasında kalan saatleri de seçtirmem gerekiyordu onu da bi abimle birlikte yaptık. Seçtikten sonra veritabanına kaydediyor ve form her açıldığında kontrol ediyor eğer veritabanında o saatler varsa dolu olarak combox'Da gösteriyor üstü çizik bir şekilde. Buraya kadar da herşeyi halletik. Yani aslında yapmaya çalıştığım şeyi yaptım ama veritabanına kaydederken Saat adlı kolonda 11:00 12:00 diye alt alta yani satır satır kaydediyor ve gereksiz olduğunu düşünüyorum hem de başka bir kolon kullanmak istersem Örneğin tarih adlı kolona ben tarih eklemek istiyorum ekledikten sonra aynı satırda kullanamicam anlatabilmişimdir umurarım. Saat adlı kolon'a 11:00 - 12:00 - 13:00 diye kaydettirip comoboxlara çekeren yine düzgün bir şekilde çekmek isityorum. Eğer zamanınız var ise team id verebilirim. Bakarız beraber

    24 Ağustos 2016 Çarşamba 11:17
  • O zaman ben sorunu anlamadim demektir. Kabaca soyle bir sey yapmadin mi:

    void Main()
    {
    	var saatler = Enumerable.Range(0,24).Select(e => TimeSpan.FromHours(e).ToString(@"hh\:mm"));
    	saatler.Dump();
    	Form f = new Form();
    	var cmbBaslangic = new ComboBox {Top=10, Left=10, DataSource=saatler.ToList()};
    	var cmbBitis = new ComboBox {Top=10, Left=150};
    	f.Controls.Add(cmbBaslangic);
    	f.Controls.Add(cmbBitis);
    
    	cmbBaslangic.SelectedValueChanged += (sender, args) =>
    	{
    		if (cmbBaslangic.SelectedIndex != 0)
    		{
    			var secilen = cmbBaslangic.SelectedValue as string;
    			cmbBitis.SelectedIndex = -1;
    			cmbBitis.Items.Clear();
    			cmbBitis.Items.AddRange( saatler.Where(s => TimeSpan.Parse(s) >= TimeSpan.Parse(secilen)).ToArray());
    		}
    	};
    	
    	f.Show();
    }

    24 Ağustos 2016 Çarşamba 11:20
    Yanıtlayıcı
  • Çetin abi e postana bakabilirmisin
    24 Ağustos 2016 Çarşamba 11:26
  • Baktim bu mesajin linkini vermissin :)

    Ben benzer isleri yillardir yapiyorum, henuz ideal kontrolu ben de bulamadim. Oyle combolarla degil, gorsel olarak surukle ve sec gibi yontemlerle yapmak en iyisi gibi (kodunu filan sorma - ornek istersen youtube'da engineerica systems kanalinda bulabilirsin).

    24 Ağustos 2016 Çarşamba 11:44
    Yanıtlayıcı
  • Çetin abi o zaman sadece ve sadece şunu soruyorum. Saatler adlı kolonumda üste bahsettiğim gibi iki saat arasındakileri değilde direk 11:00 - 12:00 - 13:00 diye kaydettim bunu combox'a nasıl çekebilirim? 
    24 Ağustos 2016 Çarşamba 13:32
  • Eger o sekilde tek kolonda 11:00-12:00-13:00 diye kaydediyorsan, bunu combobox'a nasil cekecegini de sen kendin bulacaksin. Neden oyle garip bir sekilde kaydettin ki? Ornegin: 11:00 ve 21:00 gibi baslangic, bitis ayri kolonlarda kaydetmek yerine neden 11:00 - 12:00 - 13:00 ... 19:00 - 20:00 - 21:00 diye tek kolonda kaydettin? Aradakilerin fonksiyonu ne? Hadi tek kolon kullandin, neden 11:00 - 13:00 gibi degil de aradaki zamanlari da yaziyorsun? Bir dakika hassasiyetli bir sistem olsaydi, sadece bir saatlik aralik icin bile 60 tane 11:00 - 11:01 ... gibi deger mi yazacaktin? Tasarimini degistir.

    Bu iste (benim kullandigim tasarimlardan birisinde mevcut), tum gun istenen saat araligi kadar karakter ile belirtilebilir (1 saat hassasiyet kullaniyorsan, 24 adet ornegin M karakteri ile -  MMMMMMMMMMMMMMMMMMMMMMMM). M - Musait anlaminda olabilir. Her ne ise harf kodlariyla "en azindan" 26 farkli durumu tek karakterle saklamak mumkun. 11:00 - 13:00 araligi rezerve ise (R diyelim) - MMMMMMMMMMMRRMMMMMMMMMMM seklini alir. Herhangi bir nedenle, rezervasyona diyelim ki 9:00 - 12:00 eklendi cakisan zamanlar dert olmaz. O araligi yazinca otomatikman 9 - 13 olmus olur. Bu bir cesit optimizasyon, artilari da eksileri de olan bir optimizasyon, aklinda bulunsun.

    Not:

    string s = "11:00 - 12:00 - 13:00";
    var zamanlar = s.Split('-').Select(t => t.Trim());
    var baslangic = zamanlar.First();
    var bitis = zamanlar.Last();
    

    25 Ağustos 2016 Perşembe 09:16
    Yanıtlayıcı
  • Eger o sekilde tek kolonda 11:00-12:00-13:00 diye kaydediyorsan, bunu combobox'a nasil cekecegini de sen kendin bulacaksin. Neden oyle garip bir sekilde kaydettin ki? Ornegin: 11:00 ve 21:00 gibi baslangic, bitis ayri kolonlarda kaydetmek yerine neden 11:00 - 12:00 - 13:00 ... 19:00 - 20:00 - 21:00 diye tek kolonda kaydettin? Aradakilerin fonksiyonu ne? Hadi tek kolon kullandin, neden 11:00 - 13:00 gibi degil de aradaki zamanlari da yaziyorsun? Bir dakika hassasiyetli bir sistem olsaydi, sadece bir saatlik aralik icin bile 60 tane 11:00 - 11:01 ... gibi deger mi yazacaktin? Tasarimini degistir.

    Bu iste (benim kullandigim tasarimlardan birisinde mevcut), tum gun istenen saat araligi kadar karakter ile belirtilebilir (1 saat hassasiyet kullaniyorsan, 24 adet ornegin M karakteri ile -  MMMMMMMMMMMMMMMMMMMMMMMM). M - Musait anlaminda olabilir. Her ne ise harf kodlariyla "en azindan" 26 farkli durumu tek karakterle saklamak mumkun. 11:00 - 13:00 araligi rezerve ise (R diyelim) - MMMMMMMMMMMRRMMMMMMMMMMM seklini alir. Herhangi bir nedenle, rezervasyona diyelim ki 9:00 - 12:00 eklendi cakisan zamanlar dert olmaz. O araligi yazinca otomatikman 9 - 13 olmus olur. Bu bir cesit optimizasyon, artilari da eksileri de olan bir optimizasyon, aklinda bulunsun.

    Not:

    string s = "11:00 - 12:00 - 13:00";
    var zamanlar = s.Split('-').Select(t => t.Trim());
    var baslangic = zamanlar.First();
    var bitis = zamanlar.Last();

    Çetin dediğiniz gibi 11:00 - 13:00 arasında ki verileri direk olarak çekmeyi düşündüm ama daha da zor olur diye yapmadım eğer öyle daha da kullanışlı olacaksa öyle yapayım. Birde şunu ekleyeyim siz demişssiniz ki bir dakikali hassasiyetli sistem olsaydı her dakikası için mi yapıcaktın diye. Hayır yapmayacaktım. Çünkü benimcombox'a girdiğim itemler belli aynı gösterdiğim gibi 11:00 12:00 vb... yani combox'daki itemleri ben zaten kendim comobox'A girdiğim için öyle bir şeye ihtiayım olmayacak dika dika yapmayacağım yani. Ayrietten ise yukarıda verdiğiniz kodda string 'i "s" diye tanımlamışşsınız ve 11:00 - 23:00 - 13:00 demişsiniz az önce de bahsettiğim gibi ben bu değerli combox'dan alıyorum.Bu şekilde değilde comobox itemlerine bağlayabilirmiyiz.
    25 Ağustos 2016 Perşembe 16:08