ÇözümPark'a hoş geldiniz. Oturum Aç | Üye Ol
 
Ana Sayfa Makale Video Forum Resimler Dosyalar Etkinlik Hizmetlerimiz Biz Kimiz

c# datagridde çok şarta bağlı filtreleme

Son Mesajınız 05-29-2018, 15:53 Ahmet ATASAGUN tarafından gönderildi. 10 yanıt.
Mesajları Sırala: Önceki Sonraki
  •  07-23-2016, 13:51 495297

    c# datagridde çok şarta bağlı filtreleme

    herkese selamlar

    c# projemdeki fatura formunda datagridde çoklu şarta bağlı filtreleme yapmak istiyorum

    bağlantı;

    public void stokbaglan()
    {
    con = new SqlConnection("server=SALON\\SQLEXPRESS; Initial Catalog=muhasebe;Integrated Security=true");
    con.Open();
    da = new SqlDataAdapter("Select * from stokdb", con);
    ds = new DataSet();
    da.Fill(ds, "stokdb");
    dataGridView1.DataSource = ds.Tables[0];
    con.Close();

    }

    şeklindedir

    ve;

    public void arabul()

    {

    baglanti.Open();
    string kayit = "SELECT * from stokdb where isim=@isim";
    SqlCommand komut = new SqlCommand(kayit, baglanti);
    komut.Parameters.AddWithValue("@isim", ttextbox1.Text);
    SqlDataAdapter da = new SqlDataAdapter(komut);
    DataTable dt = new DataTable();
    da.Fill(dt);
    dataGridView1.DataSource = dt;
    baglanti.Close();

    }

    şeklinde tek şarta bağlı arama yapabiliyorum ancak istediğim birkaç şart daha koymak

    örnek olarak aynı grid de

    textbox2,textbox3,textbox4 e görede  süzme işlemi nasıl yapabilirim

    ilgilenip cvp verecek arkadaşlardan ricam lütfen  kodu açık yazın 

    saygılar

     

    Etiket :
  •  07-29-2016, 22:03 495553 Cevap 495297

    Cevap : c# datagridde çok şarta bağlı filtreleme

    IN yada OR kullanabilirsiniz .


    Birol AYDUĞAN
    Software&Database Support ENGINEER
    C # / . NET Developer
    Trainer / Instructor / Developer
    LSU / LUU / Logo Çözüm Ortağı
    admin@artibilisim.com
    www.artibilisim.com
    www.logomutabakat.net
  •  08-01-2016, 18:28 495640 Cevap 495297

    Cevap : c# datagridde çok şarta bağlı filtreleme

    public void arabul()

    {

    baglanti.Open();
    string kayit = "SELECT * from stokdb where (@isim is not null and isim like '%' + @isim + '%') or (@grup is not null and grupid = @grup) or (@kategori is not null and kategoriid = @kategori)";
    SqlCommand komut = new SqlCommand(kayit, baglanti);

    if (!string.isNullOrEmpty(ttextbox1.Text))
    komut.Parameters.AddWithValue("@isim", ttextbox1.Text);

    else komut.Parameters.AddWithValue("@isim", DbNull.Value);

     

    if (!string.isNullOrEmpty(ttextbox2.Text))
    komut.Parameters.AddWithValue("@grup ", ttextbox2.Text);

    else komut.Parameters.AddWithValue("@grup ", DbNull.Value);

     

    if (!string.isNullOrEmpty(ttextbox3.Text))
    komut.Parameters.AddWithValue("@kategori ", ttextbox3.Text);

    else komut.Parameters.AddWithValue("@kategori ", DbNull.Value);


    SqlDataAdapter da = new SqlDataAdapter(komut);
    DataTable dt = new DataTable();
    da.Fill(dt);
    dataGridView1.DataSource = dt;
    baglanti.Close();

    }

     

    gibi olabilir. tabi grup ve kategori verileri combobox tan da gelebilir. örneği kodunuza göre düzenleyin.

  •  08-01-2016, 21:32 495642 Cevap 495640

    Cevap : c# datagridde çok şarta bağlı filtreleme

    çok teşekkür ederim

  •  08-02-2016, 10:59 495665 Cevap 495642

    Cevap : c# datagridde çok şarta bağlı filtreleme

     

    çok teşekkür ederim

    dedim ama ben soruyu yalnış sormuşum hocam olay şöyle

    bahse konu form açılırken  db de 2 önemli kriterden biri olan resmi hesabı

    baglanti.Open();
    SqlCommand komut = new SqlCommand("SELECT * from stokdb where resmi=@resmi", baglanti);
    komut.Parameters.AddWithValue("@resmi", resmi.Text);
    SqlDataAdapter da = new SqlDataAdapter(komut);
    DataTable dt = new DataTable();
    da.Fill(dt);
    dataGridView1.DataSource = dt;
    baglanti.Close(); 

    kodu  ile resmi hesapları süzerek listeliyor. bundan sonra süzme işlemleri grid üzerinden olmalı

    sizin göndermiş olduğunuz kod ile her box veya combo tekrar tekrar db üzerinden veri süzüyor.

    oysa ki zaten süzülmüş gelen verileri grid üzrinde tekrar süzmeli.

     

    ilginize teşekkür ederim

     

     

     

    Etiket :
  •  08-02-2016, 14:06 495688 Cevap 495297

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Dilerseniz bu işlemi SQL Server tarafında oluşturacağınız bir Stored Procedure ile gerçekleştirebilirsiniz.

    COALESCE kullanarak verileri null olarak yollayabilir, null olmayanları seçebilirsiniz. Örneğin;

     

    txt1, txt2, txt3, txt4 adında textBoxlar olsun.

    deger1, deger2, deger3, deger4 karşılıkları olsun.

    SQL server tarafındaki işlemi şöyle yapın:

     

    create procedure StokGetir

    @deger1 nvarchar(50),

    @deger2 nvarchar(100),

    @deger3 nvarchar(100),

    @deger4 nvarchar(100)

    AS

    BEGIN

    SELECT * FROM Stoklar WHERE (Stoklar.deger1=COALESCE(@deger1, Stoklar.deger))

    AND (Stoklar.deger2=COALESCE(@deger2, Stoklar.deger2)) AND (Stoklar.deger3=COALESCE(@deger3, Stoklar.deger3))

    AND (Stoklar.deger4=COALESCE(@deger4, Stoklar.deger4))

    END

     

    şeklinde bir SP oluşturup o SP'ye verileri txt1, txt2, txt3, txt4 şeklinde gönderebilirsiniz. Tıpkı insert işleminde olduğu gibi AddWithValue methoduna değerleri eklerseniz veriler önünüze gelecektir. AddWithValue sadece insert ile çalışmaz. Unutmadan SqlCommand nesneninizin CommandType özelliğine, CommandType.StoredProcedure şeklinde bildirim uygulamanız gerekiyor.

     

    @ ile başlayanlar, procedure parametreleri. Tıpkı methodların parametre alması gibi.

     

    Stoklar.deger1 ise deger1 adındaki alanları temsil ediyor. Bunu kendinize göre uyarlarsanız SQL sorgularını program tarafında yazmaktan da kaçınmış olursunuz.

     

    Bu arada AddWithValue kullanmak yerine Add kullanabilirsiniz.

     

    http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

     

    İyi çalışmalar dilerim.

  •  08-02-2016, 16:47 495707 Cevap 495688

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Ali GÖREN:

    Dilerseniz bu işlemi SQL Server tarafında oluşturacağınız bir Stored Procedure ile gerçekleştirebilirsiniz.

    COALESCE kullanarak verileri null olarak yollayabilir, null olmayanları seçebilirsiniz. Örneğin;

     

    txt1, txt2, txt3, txt4 adında textBoxlar olsun.

    deger1, deger2, deger3, deger4 karşılıkları olsun.

    SQL server tarafındaki işlemi şöyle yapın:

     

    create procedure StokGetir

    @deger1 nvarchar(50),

    @deger2 nvarchar(100),

    @deger3 nvarchar(100),

    @deger4 nvarchar(100)

    AS

    BEGIN

    SELECT * FROM Stoklar WHERE (Stoklar.deger1=COALESCE(@deger1, Stoklar.deger))

    AND (Stoklar.deger2=COALESCE(@deger2, Stoklar.deger2)) AND (Stoklar.deger3=COALESCE(@deger3, Stoklar.deger3))

    AND (Stoklar.deger4=COALESCE(@deger4, Stoklar.deger4))

    END

     

    şeklinde bir SP oluşturup o SP'ye verileri txt1, txt2, txt3, txt4 şeklinde gönderebilirsiniz. Tıpkı insert işleminde olduğu gibi AddWithValue methoduna değerleri eklerseniz veriler önünüze gelecektir. AddWithValue sadece insert ile çalışmaz. Unutmadan SqlCommand nesneninizin CommandType özelliğine, CommandType.StoredProcedure şeklinde bildirim uygulamanız gerekiyor.

     

    @ ile başlayanlar, procedure parametreleri. Tıpkı methodların parametre alması gibi.

     

    Stoklar.deger1 ise deger1 adındaki alanları temsil ediyor. Bunu kendinize göre uyarlarsanız SQL sorgularını program tarafında yazmaktan da kaçınmış olursunuz.

     

    Bu arada AddWithValue kullanmak yerine Add kullanabilirsiniz.

     

    http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

     

    İyi çalışmalar dilerim.

    hocam ilginize çok çok teşekkür ederim anlayan için inanıyoruki çok iyi açıklamışsınızdır.

    Ancak ben o kadar acemiyimki defalarca okumama rağmen ne yapmam gerektiğini bir türlü anlayamadım.Lütfen neyi nasıl yapmama gerektiğini detaylı yazarmısınız.

    yani mesela şu kodu diyelimki sql in şurasına falanca kodu sql in burasına filanca kodu formun şurasına falan gibi.

    ben yeni kodlama öürenmeye uğraşıyorum ama yüz yüze eğitim amadığım için anlamakta çok zorlanıyorum.

    anlayışınız için teşekkür ederim.

    Etiket :
  •  08-02-2016, 21:31 495714 Cevap 495707

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Kısa ve öz WHER isim IN (texbox1.text,texbox2.text,texbox3.text,texbox4.text)

    yani isim alanında 4 kritere göre arama yapıyorsun .


    Birol AYDUĞAN
    Software&Database Support ENGINEER
    C # / . NET Developer
    Trainer / Instructor / Developer
    LSU / LUU / Logo Çözüm Ortağı
    admin@artibilisim.com
    www.artibilisim.com
    www.logomutabakat.net
  •  08-03-2016, 9:27 495725 Cevap 495707

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Hmm o konuda bir şey diyemem. Stored Procedure kullanımını ve Stored Procedure'lerin C# tarafında kullanımına bakmanızı öneririm.

    Demek istediğim detaylı bir arama için bu gibi bir işlem kullanabilirsiniz. Kendi kullandığım bir yöntem ayrıca.

  •  08-03-2016, 17:17 495769 Cevap 495714

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Birol Aydugan:

    Kısa ve öz WHER isim IN (texbox1.text,texbox2.text,texbox3.text,texbox4.text)

    yani isim alanında 4 kritere göre arama yapıyorsun .

    hocam selamlar sanırım sizin öneriniz benim gibi acemiye göre daha ilgi cekici ve kola gibi geldi ama öneriyi biraz daha açabilllirmisiniz lutfen mumkunse bir ornekle ama lutfen detaylı bir ornekle açıklayabilirmisiniz.

    ben şöyle yapmak istiyorum mesela

    mutlaka resmi hesabının içinde

    irsaliye noya göre ara

    stok koduna göre ara

    stok adına göre ara

    fatura noya göre ara

    tutara göre ara ........ devam edip gidebilir

    ama en önemlisi mutlaka ilk kriter "RESMİ HESAP"

    tüm aramalar bunun içinde olmalı

    resmi hesap sütununda işte 

    fasonlar

    imalatlar

    takaslar vs gibi hesap isimleri de bulunmakta aranan veri mutlaka resmi hesap içinde aranmalı vs gibi

    herkese teşekkürller

    Etiket :
  •  05-29-2018, 15:53 531563 Cevap 495769

    Cevap : c# datagridde çok şarta bağlı filtreleme

    Şu an ki geliştirdiğim mevcut Wpf projemde bunu uyguladım. Genel mantık şu şekilde :

    string sqlcumlesi değişkeni oluşturulur. Her doldurulan alan için sorgu cümlesine metinler ilave edecek şekilde kontroller hazırlanır. En son sorgu cümlesindeki revizyon yapılarak sorgu uygulanır.

    bir örnek gerekirse :

     

    public void DegerAtamalar()
    {
       sorgucumlesi = "SELECT * FROM serinotakip WHERE kayittarihi >= CONVERT(DATETIME,'" + DatekayitTarihiilk.SelectedDate + "',104) AND kayittarihi <= CONVERT(DATETIME,'20.06.2018 00:00:00',104) AND ";
       if (checkBoxOnayTarih.IsChecked == true) { sorgucumlesi += "onaytarihi >= CONVERT(DATETIME, '01.01.2018 00:00:00', 104) AND onaytarihi <= CONVERT(DATETIME, '20.06.2018 00:00:00', 104) AND "; }
       if (checkBoxSilinmis.IsChecked == true) { sorgucumlesi += "sil LIKE '1' AND "; }
       else { sorgucumlesi += "sil LIKE '0' AND "; }
       if (checkBoxOnaysiz.IsChecked == true) { sorgucumlesi += "onaytarihi IS NULL AND "; }
       if (textBoxSeriNo.Text != "") { sorgucumlesi += "serino LIKE '" + textBoxSeriNo.Text + "' AND "; }
       if (comboBoxMTipi.Text != "") { sorgucumlesi += "tip LIKE '" + comboBoxMTipi.Text + "' AND "; }
       if (comboBoxMDegeri.Text != "") { sorgucumlesi += "deger LIKE '" + comboBoxMDegeri.Text + "' AND "; }
       if (comboBoxMKasnagi.Text != "") { sorgucumlesi += "kasnak LIKE '" + comboBoxMKasnagi.Text + "' AND "; }
       if (comboBoxTurSayisi.Text != "") { sorgucumlesi += "tur LIKE '" + comboBoxTurSayisi.Text + "' AND "; }
       if (comboBoxiletkenCapi.Text != "") { sorgucumlesi += "cap LIKE '" + comboBoxiletkenCapi.Text + "' AND "; }
       if (comboBoxKaydeden.Text != "") { sorgucumlesi += "kaydeden LIKE '" + comboBoxKaydeden.Text + "' AND "; }
       if (comboBoxOnaylayan.Text != "") { sorgucumlesi += "onaylayan LIKE '" + comboBoxOnaylayan.Text + "' AND "; }
       sorgucumlesi = sorgucumlesi.Substring(0, sorgucumlesi.Length - 4).Trim();
    }

    private void butonSorgula_Click(object sender, RoutedEventArgs e)
    {
       DegerAtamalar();
       using (var sonuc = new AkMotorDbEntities1())
          {
          try
          {
             var veritablosu = sonuc.serinotakips.SqlQuery(sorgucumlesi).ToList();
             dataGridVerilerRapor.ItemsSource = veritablosu;
          }
          catch (Exception hata)
          {
             MessageBox.Show(hata.Message);
          }
       }
    }

    Benim izlediğim yol bu ama profesyonel şekilde nasıl yapılıyor bilmiyorum. Umarım faydalı olmuşumdur.

RSS haberlerini XML olarak görüntüle