none
C# 2 ADET DATAGRİDVİEW ARASINDA KARŞILAŞTIRMA YAPMAK RRS feed

  • Soru

  • Merhaba;

    Yapmak istediğim işlem biraz karışık dilim döndüğünce anlatmaya çalışacağım. İlk önce form tasarımım şu şekilde ;

    Burada Bekleyen Siparişler Butonuna tıklayarak açılan Form da dataGridView den seçim yapıp bu form da ki dataGridView2 ye aktarıyorum. Buraya kadar bir sorun yok. Yukarıda barkod okuttuğum yerde barkodu okutup o barkoda ait stok kodu ve stok adını da dataGridView1 e aktarıyorum. Yapmak istediğim işlemler şöyle;

    Örneğin İlk olarak F00000000158 Barkodu okuttum dataGridView2 ile karşılaştıracak dataGridView2 de ki stok kodu ile aynıysa ekleyecek değil ise "okuttuğunuz barkod listedeki ürünle aynı değil" gibi uyarı verecek eğer ürün aynıysa ekleyecek Miktar Kısmını varsayılan 1 olarak getirecek bir daha ki okutmam da farklı bir barkod okutursam "okuttuğunuz barkod listede ki ürünle aynı değil" gibi hata verecek Aynı barkodu okutursamda her okuttuğum da miktar kısmını 1 adet 1 adet arttıracak farklı bir satır eklemeyecek sadece arttıracak. dataGridView2'de şu işe yarayacak barkod okuturken 21. barkodu okutursam dataGridView2'de miktar kısmı 20 olduğu için Fazla ürün okuttunuz gibi bir uyarı verecek ve kabul etmeyecek. Eğer 18 Ürün okutup kaydet dersek "2 adet eksik ürün girdiniz devam etmek istiyormusunuz" gibi uyarı verecek.

    Şuan ki Kodlar şu şekilde;

    DataTable tablo = new DataTable();

    private void SiparisSevk_Load(object sender, EventArgs e) { zaman.Text = DateTime.Now.ToString(); tablo.Columns.Add("Stok Kodu", typeof(string)); tablo.Columns.Add("Stok Adı", typeof(string)); tablo.Columns.Add("Miktar", typeof(string)); dataGridView1.DataSource = tablo; this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView1.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(0, 192, 192); this.dataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView2.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(0, 192, 192); } private void bekleyensiparisler_Click(object sender, EventArgs e) { BekleyenSiparisler bekleyen = new BekleyenSiparisler(); bekleyen.ShowDialog(); } private void kaydet_Click(object sender, EventArgs e) { barkod.Enabled = false; } private void barkod_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { string connStr = "Server=ip;Database=veritabanı;Uid=SA;Pwd='şifre';"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); string sorgu = "SELECT dbo.trk(STOK_KODU) AS STOK_KODU, dbo.trk(STOK_ADI) AS STOK_ADI FROM TBLSTSABIT WHERE BARKOD1= '" + barkod.Text + "'"; SqlCommand cmd = new SqlCommand(sorgu, conn); SqlDataReader cikti = cmd.ExecuteReader(); if (cikti.Read()) { textBox1.Text = cikti["STOK_KODU"].ToString(); textBox2.Text = cikti["STOK_ADI"].ToString(); tablo.Rows.Add(textBox1.Text, textBox2.Text); dataGridView1.DataSource = tablo; } else { MessageBox.Show("Barkod Numarası Bulunamadı.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); barkod.Text = ""; barkod.Focus(); } conn.Close(); if (e.KeyCode == Keys.Enter) { barkod.Focus(); } barkod.Text = ""; textBox1.Text = ""; textBox2.Text = ""; } } private void button1_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); } else { MessageBox.Show("Lüffen silinecek satırı seçin.","Hata",MessageBoxButtons.OK,MessageBoxIcon.Information); } }

    Biraz uzun ve karışık oldu sanırım. Değerli yorumlarınızı bekliyorum Şimdiden teşekkür ederim.

    3 Kasım 2018 Cumartesi 16:15

Yanıtlar

  • private void barkod_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            string stokKodu;
            using (SqlConnection conn = new SqlConnection("Server=ip;Database=veritabanı;Uid=SA;Pwd='şifre';"))
            {
                using (SqlCommand cmd = new SqlCommand("SELECT dbo.trk(STOK_KODU) FROM TBLSTSABIT WHERE BARKOD1=@barkod", conn))
                {
                    cmd.Parameters.AddWithValue("@barkod", barkod.Text);
                    conn.Open();
                    stokKodu = $"{cmd.ExecuteScalar()}";
                    if (string.IsNullOrWhiteSpace(stokKodu))
                    {
                        MessageBox.Show("HATA: Barkod Numarası Bulunamadı.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else if (stokKodu.Equals($"{dataGridView2.Rows[0].Cells[0].Value}", StringComparison.CurrentCultureIgnoreCase))
                    {
                        if (dataGridView1.Rows.Count < 1)
                        {
                            dataGridView1.Rows.Add(dataGridView2.Rows[0].Cells[0].Value, dataGridView2.Rows[0].Cells[1].Value, 1);
                        }
                        else
                        {
                            int miktar = Convert.ToInt32(dataGridView1.Rows[0].Cells[2].Value ?? 0);
                            int limit = Convert.ToInt32(dataGridView2.Rows[0].Cells[2].Value ?? 0);
                            if (miktar < limit)
                            {
                                dataGridView1.Rows[0].Cells[2].Value = ++miktar;
                            }
                            else
                            {
                                MessageBox.Show("HATA: Listedeki miktardan daha fazla ürün ekleyemezsiniz.");
                            }
                        }
                    }
                    else
                        MessageBox.Show("HATA: Okuttuğunuz barkod listede ki ürünle aynı değil.");
                }
            }
            barkod.Focus();
            barkod.Text = "";
            textBox1.Text = "";
            textBox2.Text = "";
        }
    }
    
    private void kaydet_Click(object sender, EventArgs e)
    {
        int miktar = Convert.ToInt32(dataGridView1.Rows[0].Cells[2].Value ?? 0);
        int limit = Convert.ToInt32(dataGridView2.Rows[0].Cells[2].Value ?? 0);
        if (limit == miktar)
        {
            barkod.Enabled = false;
        }
        else
        {
            MessageBox.Show("HATA: Listedeki miktardan daha az ürün kaydedemezsiniz.");
        }
    }

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

    • Düzenleyen MuratAKSARAY 6 Kasım 2018 Salı 06:28
    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 09:56
  • Murat bey uzak bağlantıyla denedim şimdi. Barkodu okuttuğum zaman şöyle bir hata veriyor.

    Satır 65 diyor. Satır 65'de şu kısım var.

                    if (dataGridView1.Rows.Count < 1)
                    {
          Satır 65 --> dataGridView1.Rows.Add(dataGridView2.Rows[0].Cells[0].Value, dataGridView2.Rows[0].Cells[1].Value, 1);
                    }






         Bu datagrid1'in datasource üne atanmış bir veri zaten var sen gelip buna satır sütun dalamazsın(ekleyemezsin) diyor kibarca.
    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 20:09
  • dataGridView.DataSource özelliğini null yapın.

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

    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 20:28
  • Kodları düzenledim. Bu haliyle kullanabilirsiniz.

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

    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    6 Kasım 2018 Salı 06:29
  • dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString("N0");

    yerine,

    dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString();

    yazın.


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

    • Yanıt Olarak İşaretleyen Toprak Volkan 9 Kasım 2018 Cuma 08:11
    7 Kasım 2018 Çarşamba 14:40

Tüm Yanıtlar

  • Bence datatable gibi ağır nesneler kullanmanıza gerek yok bir adet sınıf ve bir collection gayet yeterli olur , datagridlerin datasource karşılaştırmasınıda basitçe çözersiniz bu şekilde.Yani sizin sorun şuna indirgenir iki liste aynı mı değil mi.Yada hızlıca LINQ sorguları yaparsınız koleksiyonlar üzerinde.

    Bir diğer hususta veritabanı bağlantılarınız , bağlantı nesnelerinizi en azından using içerisinde tanımlamalısınız , bu nesneler üretildikten sonra garbagecollection tarafından kendiliğinden toplanmayacaktır sizin nesneleri bellekten atmanız gerekli.

    Özetle , veritabanı tablolarınıza karşılık gelen sınıflar oluşturup datagride bir bindingsource atayıp sonra tablolardan çektiğiniz verileri bir listeye koyup bunları bindingsource'un datasourceune atmanız gerekli.

    Kolay gelsin.

    4 Kasım 2018 Pazar 08:02
  • Yorumunuz için teşekkür ederim mehmet bey ama kod kısmında çok acemiyim. Bu bahsettiğim durumuda iş yerinde kullanmam için yapmam gerekiyor. Kod olarak yardımcı olunursa daha iyi olur.
    4 Kasım 2018 Pazar 09:23
  • Yorumunuz için teşekkür ederim mehmet bey ama kod kısmında çok acemiyim. Bu bahsettiğim durumuda iş yerinde kullanmam için yapmam gerekiyor. Kod olarak yardımcı olunursa daha iyi olur.

          Anladım.Size kod yazma konusunda ben yardımcı olamayacağım.Ancak biraz araştırırsanız bağlantı nasıl olmalı olmamalı , bindingsource nedir nasıl kullanılır , Liste nedir , vs.Çok rahat edersiniz.

    Şurada bir arkadaşa bindingsource ve ado.net konusunda yardımcı olmaya çalışmıştım.İşinize yarayacaktır inceleyin isterseniz.

    NOT:Söz ettiğim şeyler benim bilgim çerçevesinde, bende muhteşem bir insan değilim ve şu kesindir ki bu forumda benden kat kat iyi programcılar vardır.Yani bu doğrudur bunu yap diye dayatmıyorum(iddia etmiyorum) ancak kullandığın sistemden kat kat daha iyi diyebilirim.

    4 Kasım 2018 Pazar 10:03
  • Yorumunuz için tekrar teşekkür ederim dediğiniz gibi araştıracağım. Kod kısmında yardımcı olabilecek kimse varmı.
    5 Kasım 2018 Pazartesi 05:54
  • private void barkod_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            string stokKodu;
            using (SqlConnection conn = new SqlConnection("Server=ip;Database=veritabanı;Uid=SA;Pwd='şifre';"))
            {
                using (SqlCommand cmd = new SqlCommand("SELECT dbo.trk(STOK_KODU) FROM TBLSTSABIT WHERE BARKOD1=@barkod", conn))
                {
                    cmd.Parameters.AddWithValue("@barkod", barkod.Text);
                    conn.Open();
                    stokKodu = $"{cmd.ExecuteScalar()}";
                    if (string.IsNullOrWhiteSpace(stokKodu))
                    {
                        MessageBox.Show("HATA: Barkod Numarası Bulunamadı.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else if (stokKodu.Equals($"{dataGridView2.Rows[0].Cells[0].Value}", StringComparison.CurrentCultureIgnoreCase))
                    {
                        if (dataGridView1.Rows.Count < 1)
                        {
                            dataGridView1.Rows.Add(dataGridView2.Rows[0].Cells[0].Value, dataGridView2.Rows[0].Cells[1].Value, 1);
                        }
                        else
                        {
                            int miktar = Convert.ToInt32(dataGridView1.Rows[0].Cells[2].Value ?? 0);
                            int limit = Convert.ToInt32(dataGridView2.Rows[0].Cells[2].Value ?? 0);
                            if (miktar < limit)
                            {
                                dataGridView1.Rows[0].Cells[2].Value = ++miktar;
                            }
                            else
                            {
                                MessageBox.Show("HATA: Listedeki miktardan daha fazla ürün ekleyemezsiniz.");
                            }
                        }
                    }
                    else
                        MessageBox.Show("HATA: Okuttuğunuz barkod listede ki ürünle aynı değil.");
                }
            }
            barkod.Focus();
            barkod.Text = "";
            textBox1.Text = "";
            textBox2.Text = "";
        }
    }
    
    private void kaydet_Click(object sender, EventArgs e)
    {
        int miktar = Convert.ToInt32(dataGridView1.Rows[0].Cells[2].Value ?? 0);
        int limit = Convert.ToInt32(dataGridView2.Rows[0].Cells[2].Value ?? 0);
        if (limit == miktar)
        {
            barkod.Enabled = false;
        }
        else
        {
            MessageBox.Show("HATA: Listedeki miktardan daha az ürün kaydedemezsiniz.");
        }
    }

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

    • Düzenleyen MuratAKSARAY 6 Kasım 2018 Salı 06:28
    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 09:56
  • Murat bey ilginiz ve alakanız için tekrar tekrar teşekkür ederim daha deniyemedim yarın sabah deniyeceğim server iş yerinde olduğu için dışarıdan müdahale edemiyorum ama yazmak istedim şimdiden teşekkürler.
    5 Kasım 2018 Pazartesi 19:01
  • Murat bey uzak bağlantıyla denedim şimdi. Barkodu okuttuğum zaman şöyle bir hata veriyor.

    Satır 65 diyor. Satır 65'de şu kısım var.

                    if (dataGridView1.Rows.Count < 1)
                    {
          Satır 65 --> dataGridView1.Rows.Add(dataGridView2.Rows[0].Cells[0].Value, dataGridView2.Rows[0].Cells[1].Value, 1);
                    }


    Bu iletişim kutusu yerine JIT hata ayıklamayı çağırma
    hakkında detaylı bilgi için bu iletinin sonuna bakın.
    
    ************** Özel Durum Metni **************
    System.InvalidOperationException: Denetim veriye bağlı olduğunda DataGridView'in satırlar koleksiyonuna satırlar program aracılığıyla eklenemez.
       konum: System.Windows.Forms.DataGridViewRowCollection.Add(Object[] values)
       konum: WindowsFormsApplication1.SiparisSevk.barkod_KeyDown(Object sender, KeyEventArgs e) C:\Users\Volkan Toprak.DESKTOP-FEUD7GA\Desktop\..Sipariş Sevk - Kopya\WindowsFormsApplication1\SiparisSevk.cs içinde: satır 65
       konum: System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
       konum: System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
       konum: System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
       konum: System.Windows.Forms.Control.WmKeyChar(Message& m)
       konum: System.Windows.Forms.Control.WndProc(Message& m)
       konum: System.Windows.Forms.TextBoxBase.WndProc(Message& m)
       konum: System.Windows.Forms.TextBox.WndProc(Message& m)
       konum: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       konum: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       konum: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    
    
    ************** Yüklü Derlemeler **************
    mscorlib
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3190.0 built by: NET472REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    WindowsFormsApplication1
        Bütünleştirilmiş Kod Sürümü: 1.0.0.0
        Win32 Sürümü: 1.0.0.0
        CodeBase: file:///C:/Users/../Desktop/..%20Sipari%C5%9F%20Sevk%20-%20Kopya/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.exe
    ----------------------------------------
    System.Windows.Forms
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3190.0 built by: NET472REL1LAST_C
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Drawing
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Data
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3160.0 built by: NET472REL1LAST_C
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    System.Core
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3190.0 built by: NET472REL1LAST_C
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Xml
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Configuration
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Data.resources
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Data.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/System.Data.resources.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    System.Numerics
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    System.Transactions
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
    ----------------------------------------
    System.EnterpriseServices
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
    ----------------------------------------
    System.Runtime.Caching
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Caching/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll
    ----------------------------------------
    mscorlib.resources
        Bütünleştirilmiş Kod Sürümü: 4.0.0.0
        Win32 Sürümü: 4.7.3056.0 built by: NET472REL1
        CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------
    
    ************** JIT Hata Ayıklama **************
    JIT hata ayıklamayı etkinleştirmek için, bu uygulamanın veya
    bilgisayarın (machine.config) .config dosyasında
    system.windows.forms bölümünde jitDebugging değeri ayarlanmış olmalıdır.
    Ayrıca uygulama hata ayıklama etkin durumdayken derlenmiş
    olmalıdır.
    
    Örneğin:
    
    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
    JIT hata ayıklama etkinken, işlenmemiş özel durumlar
    bu iletişim kutusunda işlenmek yerine bilgisayarda kayıtlı
    JIT hata ayıklayıcısına gönderilir.



    5 Kasım 2018 Pazartesi 19:28
  • Murat bey uzak bağlantıyla denedim şimdi. Barkodu okuttuğum zaman şöyle bir hata veriyor.

    Satır 65 diyor. Satır 65'de şu kısım var.

                    if (dataGridView1.Rows.Count < 1)
                    {
          Satır 65 --> dataGridView1.Rows.Add(dataGridView2.Rows[0].Cells[0].Value, dataGridView2.Rows[0].Cells[1].Value, 1);
                    }






         Bu datagrid1'in datasource üne atanmış bir veri zaten var sen gelip buna satır sütun dalamazsın(ekleyemezsin) diyor kibarca.
    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 20:09
  • dataGridView.DataSource özelliğini null yapın.

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

    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    5 Kasım 2018 Pazartesi 20:28
  • Murat bey dediğiniz gibi dataGridView.DataSource özelliğini null yaptım herhangi bir hata yok ama şöyle bir şey oluyor. Bekleyen siparişlerden siparişi seçip datagridview2 ye aktarıyorum veritabanımda kayıtlı olmayan bir barkod okutsam dahi ilk okutmada datagridview2 deki stok kodu ve stok adını alıyor. 2.defa veritabanımda olmayan bir barkod okuttuğumda barkod bulunamadı hatası veriyor burası doğru veri tabanımda kayıtlı olan farklı bir barkod okuttuğumda okuttuğunuz barkod listedeki ürünle aynı değil diyor burasıda doğru ama ilk başta herhangi bir şey yazınca datagridview2 de ki bilgileri alıyor. Neden kaynaklanıyor olabilir.
    5 Kasım 2018 Pazartesi 21:19
  • Kodları düzenledim. Bu haliyle kullanabilirsiniz.

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

    • Yanıt Olarak İşaretleyen Toprak Volkan 7 Kasım 2018 Çarşamba 13:50
    6 Kasım 2018 Salı 06:29
  • Murat bey bir önceki sorun kalmadı ama şöyle bir şey oluyor. Bekleyen siparişlerden seçtiğim ürünün miktarı 20 olduğunda sorun yok herşey olması gerektiği gibi ilerliyor ama miktar 50.000 olunca barkodu bir kere okutuyorum datagridview1'e aktarıyor. 2. defa okuttuğumda şöyle bir hata veriyor.

    Böyle bir hata veriyor miktar 20 yani 2 hane olunca sorun yok ama 50.000 olunca bu şekilde hata veriyor.

    6 Kasım 2018 Salı 09:19
  • Sorununuz 50.000 rakamı içerisindeki nokta dan kaynaklanıyor. Sizin bilgisayarınızda bin ayracı virgül olarak ayarlanmış olmalı. Bu ayarı nokta olarak değiştirirseniz durum düzelecektir

    veya dataGridView2'ye bu değerin 50000 olarak noktasız gelmesini sağlayın

    veya,

    int limit = Convert.ToInt32(dataGridView2.Rows[0].Cells[2].Value ?? 0);

    yerine,

    int limit = Convert.ToInt32($"{dataGridView2.Rows[0].Cells[2].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));

    yazın veya,

    Uygulamanızın CultureInfo ayarını,

    string CultureName = Thread.CurrentThread.CurrentCulture.Name;
    CultureInfo ci = new CultureInfo(CultureName);
    if (ci.NumberFormat.NumberDecimalSeparator != ".")
    {
        ci.NumberFormat.NumberDecimalSeparator = ".";
        Thread.CurrentThread.CurrentCulture = ci;
     }

    değiştirin.


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

    6 Kasım 2018 Salı 10:39
  • Murat bey bunu uyguladığımda ;

    int limit = Convert.ToInt32($"{dataGridView2.Rows[0].Cells[2].Value} ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));

    Şöyle bir hata veriyor.

    Severity	Code	Description	Project	File	Line	Suppression State
    Error	CS8086	A '}' character must be escaped (by doubling) in an interpolated string.	WindowsFormsApplication1	C:\Users\Volkan Toprak.DESKTOP-FEUD7GA\Desktop\...Sipariş Sevk - Kopya1 - Kopya\WindowsFormsApplication1\SiparisSevk.cs	78	Active
    

    7 Kasım 2018 Çarşamba 06:46
  • Kodu düzenledim. Kullanabilirsiniz.

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

    7 Kasım 2018 Çarşamba 07:34
  • Murat bey tekrar düzenledim hata kalktı ama bir önce ki sorun devam ediyor. 1.barkodu okuttuğumda sorun yok 2. kez okuttuğumda aynı hatayı veriyor.

    7 Kasım 2018 Çarşamba 07:50
  • Limit değerinin bir format standardı yok mu ? Her defasında ayrı formatlarda mı geliyor ?

    Hata mesajının geldiği satır dataGridView2'ye ait.

    Yani bir işlemde, bir defa seçilip hep sabit kalıyor olması gerekmez mi ?

    Yapmak istediğiniz işlemi anlayamıyorum. Bu nedenle size daha fazla yardımcı olamayacağım.

    Yeni bir soru oluşturmanızı öneririm.


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

    7 Kasım 2018 Çarşamba 11:19
  • Format aynı murat bey yani 20 adet se 20 olarak geliyor 50 bin adetse 50.000 olarak geliyor.
    7 Kasım 2018 Çarşamba 13:14
  • Şöyle bir durum var datagridview2 ye diğer formumdan veri aktarırken şu şekilde kullanmıştık;

            private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                SiparisSevk SS = (SiparisSevk)Application.OpenForms["SiparisSevk"];
                if (dataGridView1.SelectedRows.Count > 0)
                {
                    SS.siparisno.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
                    SS.carikod.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                    SS.cariadi.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
    
                    DataTable dt = new DataTable();
    
                    dt.Columns.Add("StokKodu", typeof(string));
                    dt.Columns.Add("StokAdi", typeof(string));
                    dt.Columns.Add("Miktar", typeof(string));
    
                    DataRow dr = dt.NewRow();
                    dr["StokKodu"] = dataGridView1.Rows[e.RowIndex].Cells[1].Value;
                    dr["StokAdi"] = dataGridView1.Rows[e.RowIndex].Cells[2].Value;
                    dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString("N0");
    
                    dt.Rows.Add(dr);
                    SS.dataGridView2.DataSource = dt;
                    SS.barkod.Enabled = true;        
                    Close();
                }
            }

    Miktarı Çevirip Aktardık. Burayla alakalı bir şey olabilir mi ?

    7 Kasım 2018 Çarşamba 13:19
  • Form2'de ki datagridview den aktarırken 50.000 olarak değilde 50000 olarak aktarırsak sorun çözülecek sanırım. Nasıl bir düzenleme yapmam lazım yukarıda ki kod kısmında
    7 Kasım 2018 Çarşamba 13:50
  • dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString("N0");

    yerine,

    dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString();

    yazın.


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

    • Yanıt Olarak İşaretleyen Toprak Volkan 9 Kasım 2018 Cuma 08:11
    7 Kasım 2018 Çarşamba 14:40
  • Murat bey dediğiniz gibi uyguladığımda;

    Bu şekilde 1000,000000000 Olarak aktarıyor netsis veritabanında böyle kayıtlı olduğu için 1000 e çevirip aktarmam gerekiyor ama noktasız olması gerekiyor dataGridViewin editing özelliğini açıp elle denedim 1000 olarak yazıp barkod okuttuğumda hiç bir sorun yok tek sorun şuan bu sayenizde her şey bitti.

    9 Kasım 2018 Cuma 06:25
  • dr["Miktar"] = Convert.ToDecimal($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString("#0");

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

    9 Kasım 2018 Cuma 08:11
  • Murat bey yardımlarınız ve yorumlarınız için çok teşekkürler son sorunuda;

                    dr["Miktar"] = Convert.ToDouble($"{dataGridView1.Rows[e.RowIndex].Cells[6].Value ?? 0}".Replace(".", CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)).ToString();
    

    Bu şekilde Convert.ToDouble Yazarak çözdüm.

    9 Kasım 2018 Cuma 08:11