none
C# tek tablo ile 2 farklı datagridview kullanma RRS feed

  • Soru

  • Merhaba arkadaşlar.
    İş yerinde ufak bir program yapmaya çalışıyorum.gunluk_liste adında bir tablom var.Formuma 2 tane datagridview ekledim.ikisinede tek tablodan iş durumu alanından ambalaj ve imalat olarak veri çekip kayıtları listeliyorum.Fakat şöyle bir sorunum var datagridview üzerinden her hangi bir kaydı güncellemek istediğimde datagridview bir tanesinde güncellemeyi yapıp VT de değiştiriyor diğerinde değiştirmiyor.Kaç gündür ne yaptıysam çözemedim uzman arkadaşların cevaplarını bekliyorum.

    kodlarım bu şekilde.Ya bir yerde yanlış yapıyorum yada tek tabloda 2 datagriview kullanılmıyor

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    
    namespace Günlük_Yapılacak_Ürünler
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //kapat butonunu kaldırma
            private const int CP_NOCLOSE_BUTTON = 0x200;
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams myCp = base.CreateParams;
                    myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
                    return myCp;
                }
            }
    
    
            MySqlConnection baglan = new MySqlConnection("Server=20.0.0.198;port=3306;Database=sevkiyat2019;Uid=gsevkiyat;Pwd='153624sevkiyat';SslMode=none");
            
    
            MySqlDataAdapter da;
            DataSet ds;
            DataTable dt;
            MySqlCommandBuilder cmdb;
            MySqlCommand komut;
            MySqlDataReader dr;
            
    
            
            string toplam_koli;
            string toplam_kutu;
            string tarih_date;
            private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    baglan.Open();
                    urun_listele();
                    btn_ara.PerformClick();
                    //kayit_listele_ambalaj();
                   // kayit_listele_imalat();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }
    
            void kayit_listele_ambalaj() //Ambalajlama için Kayıtları Datagridviewde listeleme
            {
    
                try
                {
                    tarih_date = kayit_tarihi.Value.ToShortDateString();
                    da = new MySqlDataAdapter("Select * From gunluk_liste where kayit_tarihi='" + tarih_date + "' and  is_durum='Ambalaj' ORDER BY departman", baglan);
                    ds = new DataSet();
                    da.Fill(ds, "gunluk_liste");
                    ambalaj_dgv.DataSource= ds.Tables[0];
    
                    //toplamkutuf();
                    //toplamkolif();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }
            void kayit_listele_imalat() //imalat için Kayıtları Datagridviewde listeleme
            {
    
                try
                {
                tarih_date = kayit_tarihi.Value.ToShortDateString();            
                da = new MySqlDataAdapter("Select * From gunluk_liste where kayit_tarihi='" + tarih_date + "' and  is_durum='İmalat' ORDER BY departman", baglan);
                ds = new DataSet();
                da.Fill(ds, "gunluk_liste");
                imalat_dgv.DataSource = ds.Tables[0];
    
    
                    //toplamkutuf();
                    //toplamkolif();
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            void kayit_guncelle()
            {
                try
                {
                    cmdb = new MySqlCommandBuilder(da);
                    da.Update(ds, "gunluk_liste");
                    
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            private void guncelle_btn_Click(object sender, EventArgs e)
            {
    
                try
                {
                    kayit_guncelle();
                    MessageBox.Show("Kayıt güncellendi");
    
                    kayit_listele_ambalaj();
                    //kayit_listele_imalat();
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    11 Aralık 2019 Çarşamba 11:20

Tüm Yanıtlar

  • Ya kusura bakmayın ama oldukça garip bir kodlama olmuş. O değişkenleri basta tanımlayarak, görülebilir alanlarını arttırmanız çok gereksiz olmuş. DataSet'e filan da ihtiyacınız yok. Sorguda tarihi ToShortDateString ile çevirip kullanmanız ise tam bir hataya davet olmuş. Veritabanında kayıt tarihini Date\Datetime\Timestamp olarak tutmussunuzdur herhalde, eger öyle degilse o da bir baska hata olur.

    Siz tek datatable kullanıyorsunuz, ancak o datatable'i iki farklı metodda farklı kriterlerle yüklüyorsunuz. Belki de asil yapmak istediğiniz is_durum kriterini sorgudan kaldırıp, DataView kullanmaktır.

    Linq kullansanız hersey daha rahat olurdu.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    11 Aralık 2019 Çarşamba 14:07
    Yanıtlayıcı
  • yanıt için teşekkürler.Yok ne kusura bakması daha yeni yeni öğreniyorum kodlamayı.Hatalarımı eksiklerimi sizin gibi ustalardan öğrenicez inşallah.Değişkenleri en tepede tanımlamamın sebebi her fonksiyon da her alanda tekrar tanımlama yapmamaktı.Ne gibi sıkıntı yapar acaba.Tarih alanını DB de string olarak tanımladım o yüzden stringe çevirdim.

    Neyse ben tabloyu 2 yapıp o şekilde devam edeyim işin içinden çıkamicam yoksa.

    12 Aralık 2019 Perşembe 06:44
  • Projenin sizin icin önemine gore devam edin. Eger bu bir baslangic projesi olup sonradan kendiniz iyi hissedince sıfırdan bir seyler yapacaksanız 2 datatable'a ayırıp devam edin.

    Veritabanında tarih alanını string olarak tutmak bastan düzeltilmesi gereken bir durum. Eger illaki string olarak tutmak istiyorsanız, ilerisini de biraz düşünerek, hiç olmazsa "sıralanabilir" formata cevirin:

    yyyyMMdd HH:mm:ss

    seklinde. Yani "20190131 13:00:00", 31 Ocak 2019, saat 13 anlamında olur ve string olarak karsilastirilsa bile "20181201 00:00:00", yani 1 Aralik 2018'den sonradır. Bunu yapmazsanız:

    ToShortDateString() - kullanılan kültüre gore dd/MM/yyyy veya MM/dd/yyyy olabilir. Karmasaya yol açması bir yana:

    31/01/2019, 01/02/2019'dan alfabetik siralamada büyüktür. Yani, 31/01/2019'dan sonraki kayıtları aradiginizda kayitlarin cogunu istemeden elemiş olursunuz.




    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    12 Aralık 2019 Perşembe 12:38
    Yanıtlayıcı
  • çetin bey.bu c# yaptığım belki on üzeri projem ama bu projeler içerisinde 2. büyük projem(tabi bana göre).Tarihi ilk kodlamayı yaparken dediğiniz gibi tarih formatında tanımladım ama form açıldığında listelemede sorun yaşadığım için ve saat olarak filitreleme yapmayacağımdan dolayı direk stringle yaptım

    hırs yaptım gunluk_liste_imalat adında 2. bir tablo oluşturdum diğer datagriview için ama sonuç gene aynı.

    TableMaping['gunluk_liste'] veya DataTable 'gunluk_liste' update tarafından bulunamadı.

    TableMaping['gunluk_liste_imalat'] veya DataTable 'gunluk_liste_imalat' update tarafından bulunamadı.

    Kodlarım bu şekilde:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    
    namespace Günlük_Yapılacak_Ürünler
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //kapat butonunu kaldırma
            private const int CP_NOCLOSE_BUTTON = 0x200;
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams myCp = base.CreateParams;
                    myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
                    return myCp;
                }
            }
    
    
            MySqlConnection baglan = new MySqlConnection("Server=20.0.0.198;port=3306;Database=sevkiyat2019;Uid=gsevkiyat;Pwd='153624sevkiyat';SslMode=none");
            
    
            MySqlDataAdapter da;
            DataSet ds;
            DataTable dt;
            
            MySqlCommand komut;
            MySqlDataReader dr;
            
    
            
            string toplam_koli;
            string toplam_kutu;
            string tarih_date;
            private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    baglan.Open();
                    urun_listele();
                    kayit_listele_ambalaj();
                    kayit_listele_imalat();
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }
    
            void kayit_listele_ambalaj() //Ambalajlama için Kayıtları Datagridviewde listeleme
            {
                
                try
                {
                    MySqlCommandBuilder cmdba;
                    tarih_date = kayit_tarihi.Value.ToShortDateString();
                    da = new MySqlDataAdapter("Select * From gunluk_liste where kayit_tarihi='" + tarih_date + "' ORDER BY departman", baglan);
                    cmdba = new MySqlCommandBuilder(da);
                    ds = new DataSet();
                    da.Fill(ds, "gunluk_liste");
                    ambalaj_dgv.DataSource= ds.Tables[0];
    
                    //toplamkutuf();
                    //toplamkolif();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }
            void kayit_listele_imalat() //imalat için Kayıtları Datagridviewde listeleme
            {
                
                try
                {
                    MySqlCommandBuilder cmdbi;
                    tarih_date = kayit_tarihi.Value.ToShortDateString();            
                    da = new MySqlDataAdapter("Select * From gunluk_liste_imalat where kayittarihi='" + tarih_date + "' ORDER BY departmani", baglan);
                    cmdbi = new MySqlCommandBuilder(da);
                    ds = new DataSet();
                    da.Fill(ds, "gunluk_liste_imalat");
                    imalat_dgv.DataSource = ds.Tables[0];
    
    
                    //toplamkutuf();
                    //toplamkolif();
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            void kayit_guncelle_ambalaj()
            {
                try
                {
                   
                    da.Update(ds, "gunluk_liste");  
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            void kayit_guncelle_imalat()
            {
                try
                {
                                   
                    da.Update(ds, "gunluk_liste_imalat");
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            private void guncelle_btn_Click(object sender, EventArgs e)
            {
    
                try
                {
                    kayit_guncelle_ambalaj();
                    kayit_guncelle_imalat();
                    MessageBox.Show("Kayıt güncellendi");
    
                    kayit_listele_ambalaj();
                    kayit_listele_imalat();
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    aldığım hata ekranı

    13 Aralık 2019 Cuma 07:02
  • ..._listele_... metodlarında:

    ds = new DataSet();
    da.Fill(ds, ...);

    var. Yani yukarıda tanimladiginiz ds icerigi sürekli değiştiriliyor. Madem ds yukarıda tanımlı, sadece orada:

    DataSet ds = new DataSet();

    yapin. _listele_ içerisinde de:

    ...DataSource = ds.Tables[0];
    
    // yerine
    ...DataSource = ds.Tables["tablo_adi_neyse"];

    kullanin. 

    Not: Laf aramızda artık ilaç kullanımlarına da "bu isten çok anlayanlar - isimleri lazım degil -" karar verecekse yandık.

    Bu arada, tarihin date\datetime\timestamp olması gerektiğinde israr ediyorum :)



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    13 Aralık 2019 Cuma 16:56
    Yanıtlayıcı
  • Not: Laf aramızda artık ilaç kullanımlarına da "bu isten çok anlayanlar - isimleri lazım degil -" karar verecekse yandık.

    Burada ne demek istediniz anlayamadım ama verdiğiniz bilgiler için sağolun

    14 Aralık 2019 Cumartesi 05:53
  • isim vermeyeyim demistim ama ornekte kullandiginiz ilaç ve istanbul il sağlık mudurlugu'ne o yazıyı yazdıranlar diyelim.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    14 Aralık 2019 Cumartesi 19:24
    Yanıtlayıcı
  • sorunumu dataadapter ve dataset değişken tanımlamalarını her 2 tablo için ayrı ayrı yaparak çözdüm.Aynı sorunlar karşılaşan arkadaşlara faydası olur umarım
    MySqlDataAdapter daa;
    DataSet dsa = new DataSet();
    
    MySqlDataAdapter dai;
    DataSet dsi = new DataSet();

    19 Aralık 2019 Perşembe 11:14