Son Yazılar

C# Veritabanı Kayıt Silindikten Sonra Sıra No Güncelleme

C# Veritabanı Kayıt Silindikten Sonra Sıra No Güncelleme




C# Form uygulamasında Datagridview ile gösterilen bir  Veritabanın da ki Primary key ve ya Id yada Türkçesi Kimlik No olan bu alanının kullanıcıya bir Sıra no alanı olarak göstermek isteyen bu alana yeni adım atmış olan  bir Programcı Veri tabanından bir kaydın silinmesi halinde bütün kayıtların Id numaralarını otomatik olarak yeniden sıralanmasını ve silinen kaydın Id numarasını yeniden başka bir Veritabanı kaydına verilmesi gerektiğini düşünür. Ancak bu istek bir tabloya sahip bir Veritabanın da pek hoş karşılan masa da olabilir. Ama birden çok tabloya sahip bir Veritabanında bu işlem her tabloya uygulanması gerektiğinden ve bütün veri tabanını güncellenmesini gerektirdiğinden bu yöntem büyük bir karmaşıklığa neden olabilir. 

Bunun yerine Veritabanının Id sütununu Datagridview de Cells[0] olan bu sütunu (alanını) gizleyip Datagridview de Veritabanından bağımsız Cells[1] adındaki sütuna Veritabanından Datagridview  e alınan kayıt sayısı kadar For döngüsü ile otomatik olarak artan bir Sıra Numarası verebiliriz. Yani yapacağımız her ekleme ve silme işlemlerinden sonra For döngüsünü çalıştırarak Sıra No sütununu Datagridview satır sayısı kadar otomatik artan düzenli bir sıralama şeklinde düzenleyerek Sıra No sütununu güncelleye biliriz..


C# Otomatik Sıra No Tablo





C# Otomatik Sıra No Form




C# Uygulama Kodu

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Data.OleDb;
namespace AccessUygulamalar
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        OleDbConnection mdbBaglantisi = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =Access_uygulamalar.mdb");
        [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
        private extern static void ReleaseCapture();
        [DllImport("user32.DLL", EntryPoint = "SendMessage")]
        private extern static void SendMessage(System.IntPtr hwnd, int wmsg, int wparam, int lparam);
        private void Yenile()
        {
            mdbBaglantisi.Open();
            OleDbDataAdapter tdGrvAdpter = new OleDbDataAdapter("select * from Access_Uygulamalar", mdbBaglantisi);
            DataSet dtGrv = new DataSet();
            tdGrvAdpter.Fill(dtGrv);
            dtGridView.DataSource = dtGrv.Tables[0];
            dtGridView.Columns["KimlikNo"].Visible = false;//Kimlik No sütun alanını DataGridView de gizleme
            dtGridView.Columns["Sıra_No"].Width = 70;
            dtGridView.Columns["Sıra_No"].DisplayIndex = 0;
            dtGridView.Columns["MsteriAdi"].DisplayIndex = 1;
            dtGridView.Columns["Tarih"].DisplayIndex = 2;
            mdbBaglantisi.Close();
            txtAd.Text = "";
            txtTarih.Text = "";
        }
        private void OtoSıraNo() //For Döngüsünü Tanımlama
        {
            for (int i = 0; i < dtGridView.Rows.Count; i++) //DataGridView satır sayısı kadar int i yi bir artırma
            {
                dtGridView.Rows[i].Cells[1].Value = (i + 1).ToString();//Belirlediğimiz 2.Sutuna ( Cells[1] ) DataGridView satır sayısı kadar otomatik artan sayı verme
            }
            dtGridView.AllowUserToAddRows = false;//DataGridView in son sırasını gizleme
        }
        private void pnlKontrol_MouseDown(object sender, MouseEventArgs e)
        {
            ReleaseCapture();
            SendMessage(this.Handle, 0x112, 0xf012, 0);
        }
        private void btnKapat_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void btnKüçült_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
        private void btnEkle_Click(object sender, EventArgs e)
        {
            mdbBaglantisi.Open();
            OleDbCommand veriekle = new OleDbCommand("insert into Access_Uygulamalar (KimlikNo, MsteriAdi, Tarih) values (@KimlikNo,@MsteriAdi,@Tarih)", mdbBaglantisi);
            veriekle.Parameters.AddWithValue("@KimlikNo", txtKimlikNo.Text);
            veriekle.Parameters.AddWithValue("@MsteriAdi", txtAd.Text);
            veriekle.Parameters.AddWithValue("@Tarih", DateTime.Today.ToShortDateString());
            veriekle.ExecuteNonQuery();
            mdbBaglantisi.Close();
            Yenile();
            OtoSıraNo();
        }
        private void btnSil_Click(object sender, EventArgs e)
        {
            mdbBaglantisi.Open();
            OleDbCommand verisil = new OleDbCommand("delete from Access_Uygulamalar where KimlikNo = " + txtKimlikNo.Text + "", mdbBaglantisi);
            verisil.ExecuteNonQuery();
            mdbBaglantisi.Close();
            Yenile();
            OtoSıraNo();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            txtKimlikNo.Visible = false;
            mdbBaglantisi.Open();
            OleDbDataAdapter tdGrvAdpter = new OleDbDataAdapter("select * from Access_Uygulamalar", mdbBaglantisi);
            DataSet dtGrv = new DataSet();
            tdGrvAdpter.Fill(dtGrv);
            dtGridView.DataSource = dtGrv.Tables[0];
            dtGridView.Columns["KimlikNo"].Visible = false;
            dtGridView.Columns["Sıra_No"].Width=70;
            dtGridView.Columns["Sıra_No"].DisplayIndex = 0;
            dtGridView.Columns["MsteriAdi"].Width = 332;
            dtGridView.Columns["MsteriAdi"].DisplayIndex = 1;
            dtGridView.Columns["Tarih"].DisplayIndex = 2;
            mdbBaglantisi.Close();
            OtoSıraNo();
        }
    }
}

2 Yorumlar

Yazı Hakkındaki Düşünceleriniz...

  1. Ben de bunu nasıl yapacağımı bilmiyordum

    YanıtlaSil
    Yanıtlar
    1. Merhaba
      Daha iyisini bulana kadar bununla idare edebilirsin.

      Sil

Yorum Gönder

Yazı Hakkındaki Düşünceleriniz...

Daha yeni Daha eski