lostyazilim
tr.link

C# System.IndexOutOfRangeException: 'Dizin, dizi sınırlarının dışındaydı.' Hatası [ÇÖZÜLDÜ]

7 Mesajlar 10.127 Okunma
acebozum
tr.link

Cylde Cylde WM Aracı Kullanıcı
  • Üyelik 26.01.2017
  • Yaş/Cinsiyet 26 / E
  • Meslek Computer Programming
  • Konum İstanbul Avrupa
  • Ad Soyad O** Ö**
  • Mesajlar 222
  • Beğeniler 78 / 37
  • Ticaret 0, (%0)
Hayırlı geceler
bir masaüstü uygulaması geliştirmeye çalışıyorum
veritabanı işlemleri yapıyorum bu uygulamada ancak combobox'a veritabanından çektiğim veriyi seçince System.IndexOutOfRangeException: 'Dizin, dizi sınırlarının dışındaydı.' hatası veriyor

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Items.Clear();
comboboxindex = comboBox1.SelectedIndex;
baglan.Open();
SqlCommand komut = new SqlCommand("Select * From altKategori Where kategori_id="+kategori_index[comboboxindex], baglan);
SqlDataReader oku = komut.ExecuteReader();

while (oku.Read())
{
comboBox2.Items.Add(oku["kategoriAdi"].ToString());
altkategoriler.Add(oku["id"].ToString());
}
baglan.Close();
}


kodun tamamı bu hata verdiği kısım ise

SqlCommand komut = new SqlCommand("Select * From altKategori Where kategori_id="+kategori_index[comboboxindex], baglan);



burası çözümü nedir?
 

 

elektronikssl
webimgo

Cylde Cylde WM Aracı Kullanıcı
  • Üyelik 26.01.2017
  • Yaş/Cinsiyet 26 / E
  • Meslek Computer Programming
  • Konum İstanbul Avrupa
  • Ad Soyad O** Ö**
  • Mesajlar 222
  • Beğeniler 78 / 37
  • Ticaret 0, (%0)
Ek olarak dizi 1024 verilik bir alana sahip benim veritabanından çektiğim veri sayısı 200'ü geçmiyor.
 

 

mjr2018 mjr2018 Kimlik Onayı Bekliyor Banlı Kullanıcı
  • Üyelik 18.02.2018
  • Yaş/Cinsiyet 33 / E
  • Meslek yazılımcı
  • Konum İstanbul Anadolu
  • Ad Soyad M** T**
  • Mesajlar 93
  • Beğeniler 1 / 33
  • Ticaret 0, (%0)
okudaki boyutu bulup, for döngüsünde max değer olarak yaz
Cylde

kişi bu mesajı beğendi.

ontedi ontedi www.ontedi.com Kullanıcı
  • Üyelik 03.10.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Yazılım Uzmanı, Matematikçi
  • Konum Ankara
  • Ad Soyad S** T**
  • Mesajlar 1118
  • Beğeniler 325 / 324
  • Ticaret 2, (%100)
comboboxindex = comboBox1.SelectedIndex;

burada, olmayan dizi elemanı geliyor olabilir.
Cylde

kişi bu mesajı beğendi.

www.ontedi.com
www.cizgi.site
wmaraci
wmaraci

Holiqan Holiqan WM Aracı Kullanıcı
  • Üyelik 03.02.2014
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Bursa
  • Ad Soyad H** E**
  • Mesajlar 876
  • Beğeniler 211 / 116
  • Ticaret 10, (%100)
ontedi hocamın dediği gibi olabilir. comboboxindex = comboBox1.SelectedIndex; bu kısımı

if( comboBox1.SelectedIndex > -1 ){
comboboxindex = comboBox1.SelectedIndex;
}
Şeklinde yaparsanız eğer ComboBox üzerinde herhangi bir seçim yok ise hata almazsınız. Bunun dışında çok detaylı bakamadım :/
Cylde

kişi bu mesajı beğendi.

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 820
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)

comboBox1.Items.Clear(); // bu kısımda comboBox1 içeriği temizleniyor
comboboxindex = comboBox1.SelectedIndex; // bu kısımda 0 içeriğe sahip comboBox1'dan seçili index'i istiyorsun


120 öğesi olan bir listeyi temizleyip 100. öğeye erişmek veya 120 öğesi olupta 121. öğeye erişmen dizi sınırlarının dışındaydı şeklinde bir hata fırlarması normal.
Üstelik Clear(); dediğin için öğe sayısı 0 ve SelectedIndex varsayılan olarak -1 olduğu için (çünük liste boşsa default selected index -1'dir) dizi dışından bir erişim oluyor.


comboBox1.Items.Clear();


Temizleme işini ya bir satır aşağı kaydıracaksın ya da yapmayacaksın. Çünkü comboBox2 adından alt kategorileri listelediğin ikinci bir nesne var, temizlenmesi gereken bence comboBox2.
Cylde

kişi bu mesajı beğendi.

no time for caution

Cylde Cylde WM Aracı Kullanıcı
  • Üyelik 26.01.2017
  • Yaş/Cinsiyet 26 / E
  • Meslek Computer Programming
  • Konum İstanbul Avrupa
  • Ad Soyad O** Ö**
  • Mesajlar 222
  • Beğeniler 78 / 37
  • Ticaret 0, (%0)
Herkese yanıtları için teşekkür ederim Holiqan ontedi mjr2018 dediğiniz gibi çöp değer olduğu için hata veriyordu

Decimas hocamın dediğini yaptım combox1 den gelen veriyi değil 2 den gelen veriyi temizledim sorun ortadan kalktı. Tekrardan teşekkür ederim :)
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al