none
Visual Studio'da C# ile excelden çektiğim verilerde (combobox kullanarak datagridviewda) filtreleme problemi RRS feed

  • Soru

  • Merhaba.

    Visual Studio da C# ile excel den veri alıyorum. Datagridview'da gösteriyorum ve comboboxlar ile datagridview de filtreleme yapmak istiyorum. Excel dosyamda 17 farklı sütun var ve 17 farklı filtreleme yapmak istiyorum. Bu filtreleme işlemini gerçekleştirebiliyorum ancak örneğin "ORDERYEAR"ı 2017 olan "COMPLYEAR"ı 2019 olan bir veri olmadığında ve bulunamadığında Orderyear ı 2015 Complyear'ı 2019 olan bir veri olsa dahi bunu bana göstermiyor ve hiç bir hata vermiyor sadece göstermiyor.

    Ama ilk filtreleme işleminde excelde var olan bir veriyi comboxtan çekip filtre butonuna tıkladığımda datagridview da listeleniyor.

    Bu sorunu nasıl çözebilirim ?

     

    
    //COMBOBOXLARA VERİ ÇEKİYOR
            private void Form3_Load(object sender, EventArgs e)
            {
                xlsxbaglanti.Open();
                OleDbCommand cmd1 = new OleDbCommand("Select distinct ORDERYEAR from [Sheet1$]", xlsxbaglanti);
                OleDbCommand cmd2 = new OleDbCommand("Select distinct COMPLYEAR from [Sheet1$]", xlsxbaglanti);
    
    OleDbDataReader dr1 = cmd1.ExecuteReader();
                while (dr1.Read())
                {
                    comboBox1.Items.Add(dr1["ORDERYEAR"]);
                }
    
                OleDbDataReader dr2 = cmd2.ExecuteReader();
                while (dr2.Read())
                {
                    comboBox2.Items.Add(dr2["COMPLYEAR"]);
                }
    xlsxbaglanti.Close();
    }
    
     //FILTRELEME YAPIYOR
            private void button6_Click(object sender, EventArgs e)
            {
                xlsxbaglanti.Open();
                string ORDERYEAR = (comboBox1.SelectedIndex == -1) ? "%" : (string)comboBox1.SelectedItem.ToString();
                string COMPLYEAR = (comboBox2.SelectedIndex == -1) ? "%" : (string)comboBox2.SelectedItem.ToString();
    
            DataTable dt = new DataTable();
                OleDbDataAdapter ad = new OleDbDataAdapter(@"SELECT * FROM [Sheet1$] WHERE ORDERYEAR like @O and COMPLYEAR like @C ", xlsxbaglanti);
       
            ad.SelectCommand.Parameters.AddWithValue("@O", ORDERYEAR);
            ad.SelectCommand.Parameters.AddWithValue("@C", COMPLYEAR);
    
    ad.Fill(dt);
                dataGridView1.DataSource = dt;
    
                xlsxbaglanti.Close();
            }

     

    Kodu kısalttım sadece iki farklı sütunum varmış gibi.

    Yani filtrelerin tamamen temizlenip yeniden filtreleme yapabilmem gerekiyor sanırım. Yardımcı olabilcek birisi olursa çok sevinirim.

    8 Eylül 2017 Cuma 12:37

Yanıtlar

  • // ilgili komut satırlarını aşağıdaki şekilde güncelleyiniz...
    
    comboBox1.Items.Add(dr1["ORDERYEAR"].ToString());
    
    comboBox2.Items.Add(dr2["COMPLYEAR"].ToString());
    
    string ORDERYEAR = (comboBox1.SelectedIndex == -1) ? "%" : "%" + comboBox1.GetItemText(comboBox1.SelectedItem) + "%";
    
    string COMPLYEAR = (comboBox2.SelectedIndex == -1) ? "%" : "%" + comboBox2.GetItemText(comboBox2.SelectedItem) + "%";
    




    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen mgasilturk 11 Eylül 2017 Pazartesi 05:06
    8 Eylül 2017 Cuma 14:49

Tüm Yanıtlar

  • // ilgili komut satırlarını aşağıdaki şekilde güncelleyiniz...
    
    comboBox1.Items.Add(dr1["ORDERYEAR"].ToString());
    
    comboBox2.Items.Add(dr2["COMPLYEAR"].ToString());
    
    string ORDERYEAR = (comboBox1.SelectedIndex == -1) ? "%" : "%" + comboBox1.GetItemText(comboBox1.SelectedItem) + "%";
    
    string COMPLYEAR = (comboBox2.SelectedIndex == -1) ? "%" : "%" + comboBox2.GetItemText(comboBox2.SelectedItem) + "%";
    




    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen mgasilturk 11 Eylül 2017 Pazartesi 05:06
    8 Eylül 2017 Cuma 14:49
  • Çok teşekkür ederim Murat Bey.

    11 Eylül 2017 Pazartesi 05:07
  • Eğer bilginiz varsa bir soru daha sormak istiyorum. 

    Ben verilerimi excel'e yazıyorum. Excel'deki veri tipi de "general" olarak seçili. Excel'de kullandığım tüm sütunları seçip "text" tipini seçtiğimde visual studio tarafında verimi yazıyorum ve güncelleyebiliyorum. Ancak yeni bir veri yazdığımda bunu güncelleyemiyorum. illa excel'e gidip yazdığım verinin tipini text'e çevirmem gerekiyor. Çünkü ben sütunların hepsini text olarak seçsem de yeni yazdığımı general tipinde kaydediliyor ve güncellenmiyor. Bu sorundan nasıl kurtula bilirim ?

    //GUNCELLE
            void guncelle()
            {
    
                xlsxbaglanti.Open();
                string sorgu = "UPDATE [Sheet1$] SET [ORDERYEAR]=?,[COMPLYEAR]=? WHERE [MANUFNO]=?";
                OleDbCommand komut = new OleDbCommand(sorgu, xlsxbaglanti);
                komut.Parameters.AddWithValue("@?", textBox1.Text);
                komut.Parameters.AddWithValue("@?", textBox2.Text);
                xlsxbaglanti.Close();
                griddoldur();
    
    
            }
    
            void kaydet()
            {
                xlsxbaglanti.Open();
                string sorgu = "Insert into [Sheet1$] ([ORDERYEAR],[COMPLYEAR]) "
                    + "values (@O, @C)";
                OleDbCommand komut = new OleDbCommand(sorgu, xlsxbaglanti);
                komut.Parameters.AddWithValue("@O", textBox1.Text.ToString());
                komut.Parameters.AddWithValue("@C", textBox2.Text.ToString());
                komut.ExecuteNonQuery();
                xlsxbaglanti.Close();
                griddoldur();
    
            }
    
    //Burada button4 'e tıkladığımda datagridviewden seçtiğim veriyi textboxlara dolduruyorum.İstediğim yerini düzeltiyorum.
            private void button4_Click(object sender, EventArgs e)
            {
                textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
             }
    
    //Button2 güncelle butonu
            private void button2_Click(object sender, EventArgs e)
            {
                guncelle();
                griddoldur();
            }
    

    11 Eylül 2017 Pazartesi 05:25