none
C# DataGridView Güncelleme RRS feed

  • Soru

  • Merhabalar,

    Programımda bir adet DataGridView öğesi var. Ben Databaseye birşey kaydettiğimde bir butona veya bir benzer active etme yöntemiyle bu DataGridView'in içindeki bütün veriyi silip güncel olanları yazdırmak istiyorum. Kısaca update etmek istiyorum. Ama Databasemle C# arasında bir problem var Provider 4.0 - 12.0 derken her komutta beni sıkıntıya sokmaya başladı. Kullandığım komutlar şunlar;

                adtr = new OleDbDataAdapter("Select * From isim_listesi", baglanti);
                dtst = new DataSet();
                baglanti.Open();
                adtr.Fill(dtst,"isim_listesi");
                baglanti.Close();
                dataGridView1.DataSource = dtst.Tables["isim_listesi"];

    Neden çalışmadığını söylerseniz gerçekten çok yardımcı olmus olursunuz.

    Şimdiden Teşekkürler :).

    2 Temmuz 2019 Salı 06:02

Tüm Yanıtlar

  • Kolay gelsin :)

    Şimdi yanlış anlamadıysam datagrid güncellemek istiyorsunuz ve bu olmuyor.Datagrid programa ekleyip datasource bağlandığında formun loadında otomatik bir kod oluşması lazım  datagrid listelemek için şu an tam hatırlamıyorum:) bu kod olmasa bile select koduyla tekrar fillersiniz tabloyu kaba kod ;

    baglanti.Open();

    //sql komutların(ekleme,çıkarma vs)

    messagebox.show("başarılı");

    //select sorgusu ıle tabloyu doldurma veya dediğim kodla

    baglanti.Close();

    baglanti.Dispose();

    2 Temmuz 2019 Salı 06:29
  • Evet malesef olmuyor :/. Bulduğum kaynak kodlarının hiç biri işe yaramıyorum kendi oluşturduklarımda da her hangi bir tepki alamıyorum.
    2 Temmuz 2019 Salı 06:44
  • hataları atar mısın onlara bakalım nasıl hatalar alıyorsun nerde patlıyor kod ?
    2 Temmuz 2019 Salı 06:48
  • Dataset kullanmayın , isim listesi için c# da bir class oluşturup sorgudan gelen değerleri reader ile okuyup classı geriye bir dizi ya da list olarak gönderin . Datasource olarak  geriye dönen dizi ya da list i verin . 

    Altan Özdemir

    2 Temmuz 2019 Salı 07:04
  • Kod patlamıyor herhangi bir hatada yok ama hiç bir değişiklik olmuyor.
    2 Temmuz 2019 Salı 07:48
  • 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 System.Data.OleDb;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //Database Bağlantıları
            OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Database.mdb");
            DataSet dtst = new DataSet();
            OleDbCommandBuilder com = new OleDbCommandBuilder();
            OleDbDataAdapter adtr = new OleDbDataAdapter();
            DataTable tablo = new DataTable();
            string aramaSecme;
            
            private void Form1_Load(object sender, EventArgs e)
            {
    
                // DataGridView'e İsim Listesini 
                baglanti.Open();
                OleDbDataAdapter adtr = new OleDbDataAdapter("select * From isim_listesi", baglanti);
                adtr.Fill(dtst, "isim_listesi");
                dataGridView1.DataSource = dtst.Tables["isim_listesi"];
                adtr.Dispose();
                baglanti.Close();
                guncelle();
                arama_secme.Text = arama_secme.Items[0].ToString();
            }
    
            private void TextBox1_TextChanged(object sender, EventArgs e)
            {
                // Arama textBox Verilerini İşleme
                baglanti.Open();
                DataTable tbl = new DataTable();
                string vara, cumle;
                vara = textBox1.Text;
                cumle = "Select * from isim_listesi where " + aramaSecme + " like '%" + textBox1.Text + "%'";
                OleDbDataAdapter adptr = new OleDbDataAdapter(cumle, baglanti);
                adptr.Fill(tbl);
                baglanti.Close();
                guncelle();
                dataGridView1.DataSource = tbl;
            }
    
            private void Arama_secme_TextChanged(object sender, EventArgs e)
            {
                //ComboBox'tan Arama Kriterleri Oluşturma
                if(aramaSecme == "")
                {
                    aramaSecme = "adi_soyadi";
                }
                else if(arama_secme.Text == "Ad Soyad")
                    {
                        aramaSecme = "adi_soyadi";
                    }
                else if(arama_secme.Text == "Tertibi")
                    {
                        aramaSecme = "sici_nu_tertibi";   
                    }
                else if (arama_secme.Text == "Mesleği")
                {
                    aramaSecme = "meslek";
                }
            }
            private void guncelle()
            {
                baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Database.mdb");
                baglanti.Open();
                adtr = new OleDbDataAdapter("Select * From isim_listesi", baglanti);
                com = new OleDbCommandBuilder(adtr);
                dtst = new DataSet();
                adtr.Fill(dtst, "isim_listesi");
                dataGridView1.DataSource = dtst.Tables[0];
                baglanti.Close();
            }
    
            private void Button1_Click(object sender, EventArgs e)
            {
                yeni_katilis form2 = new yeni_katilis();
                form2.Show();
            }
    
            private void Form1_Activated(object sender, EventArgs e)
            {
                guncelle();
            }
        }
    }
    Malesef anlattığınızı anlayacak kadar C# bilgim yok kaynak kodlarımın hepsi burada guncelle() kod bloğunun içerisinde yapıyorum hepsini. Yardımcı olursanız sevinirim.
    2 Temmuz 2019 Salı 08:01
  • Şöyle yapacaksınız :

    dataGridView1.DataSource = null; //önce null
    
    dataGridView1.DataSource = dtst.Tables["isim_listesi"];//sonra güncel bilgiler.

    Kodunuzdaki bu kısımları yukarıda anlatıldığı gibi düzeltin.

    Ama ben olsam winform , access ,ado.net kullanmam.Niye ? 

    1-Winform kullanmam çünkü artık gerçekten eski , gereksiz ve işe yaramaz.

    2-Gözünüzü kapatın ve rastgele bir veritabanı seçin , access den iyidir açıp bakmaya bile gerek yok :) 

    3-ADO.NET öğrenin veritabanı ile iletişim konusunda veritabanının işleyişi konusunda size oldukça fazla şey kazandırır (bence) ama EntityFramework kullanmak daha hızlı uygulama geliştirmenizi sağlar.

    ADO.NET kullanacaksanız : 

    1-Parametre kullanın , SQL cümlesi içine direkt +""+ gibi stringler eklemeyin hem SQL injection açığı hemde hata fırlatmaya bahane arayan bir kod :) 

    2-Bağlantıyı açın işinizi yapın ve kapatın using bloklarını kullanın bu nesneleri toplamak(dispose) sizin sorumluluğunuz.

    3-Transaction nedir araştırın.

    Kolay gelsin.

    2 Temmuz 2019 Salı 10:57