Bu yazımızda C# ile Fatura Takip Programı oluşturacağız. Örneğimizde access veri tabanında kayıtlı olan fatura bilgilerinin DatagridView üzerinde görüntülenmesini sağlayacağız. Faturalara ait son ödeme tarihlerinin yaklaşması durumunda o faturaya ait satırın nasıl renklendirileceğini göreceğiz.
Örneğimizde kayıtların güncellenmesi işlemlerini OledbCommandBuilder kullanarak gerçekleştireceğiz. Örneğimize geçelim.
Form Tasarımını aşağıdaki gibi ayarlıyoruz.
Microsoft Access ile dbFatura.accdb veritabanı dosyamızı aşağıdaki gibi oluşturuyoruz ve Projemiz içinde “../Bin/Debug” klasörü altına kopyalıyoruz.
Şimdi de test amaçlı bir kaç kayıt giriyoruz.
Kodlarımızı yazmaya başlıyoruz.
İlk olarak;
1 2 3 4 | using System.Data; using System.Data.OleDb; |
satırlarını ekleyerek başlıyoruz.
Daha sonra public olarak;
1 2 3 4 5 6 7 8 | OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.Oledb.12.0;Data Source=dbFatura.accdb"); OleDbDataAdapter da; DataTable tablo = new DataTable(); OleDbCommandBuilder cb; TimeSpan fark; double gunfark; |
bağlantı için gerekli olan nesneleri oluşturuyoruz.
Listele() metodunda kayıtların DataGridView içerisinde görüntülenmesini sağlayacağız. Bu metodu Form_Load olayında çağırarak Form açıldığında kayıtların Datagrid içine çekilmesini sağlayacağız.
1 2 3 4 5 6 7 8 9 | void Listele() { tablo.Clear(); //www.yazilimkodlama.com da = new OleDbDataAdapter("SELECT *From fatura ", bag); da.Fill(tablo); dataGridView1.DataSource = tablo; } |
Şimdi de Son Ödeme Tarihi yaklaşan faturalar için bazı renklendirmeleri gerçekleştirecek olan metodumuzu oluşturalım.
Kodları incelediğimizde Bugünün tarihi ile Son Ödeme tarihi arasındaki fark alınarak 3 günden az kalması durumunda ve faturanın ödenmemiş olması durumunda satırın kırmızı 3-7 gün arası bir zaman kalması ve yine faturanıın ödenmemiş olması durumunda sarı olmasını sağlayacağız. Aksi durumlarda datagridview satır renginin Beyaz olmasını sağlayacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | void renklendir() { for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { fark = Convert.ToDateTime(dataGridView1.Rows[i].Cells["sontarih"].Value.ToString()) - Convert.ToDateTime(DateTime.Now.ToShortDateString()); gunfark = fark.TotalDays; bool odeme = Convert.ToBoolean(dataGridView1.Rows[i].Cells["odendi"].Value); if (gunfark <= 3 && odeme==false) { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red; } else if (gunfark > 3 && gunfark < 7 && odeme==false) { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Yellow; } else { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.White; } } } |
Şimdi oluşturmuş olduğumuz bu metotları kullanmaya başlayalım. Öncelikle Form_Load içinde Listele ve Renklendir metotlarını çağırıyoruz. Bunun yanında DatagridView Sütun başlıklarını aşağıdaki şekilde ayarlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private void Form1_Load(object sender, EventArgs e) { label1.Text = DateTime.Now.ToShortDateString(); Listele(); dataGridView1.Columns[0].Visible = false; renklendir(); dataGridView1.Columns[1].HeaderText = "Fatura Cinsi"; dataGridView1.Columns[2].HeaderText = "Fatura Tarihi"; dataGridView1.Columns[3].HeaderText = "Son Ödeme Tarihi"; dataGridView1.Columns[4].HeaderText = "Tutar"; dataGridView1.Columns[5].HeaderText = "Ödeme Yapıldı"; } |
Güncelle butonu içinse aşağıdaki kodları oluşturuyoruz. OledbCommandBuilder ile güncelleme yapılmasını sağlıyoruz. Yine burada da Renklendir metodunu çağırarak faturanın ödenmiş olarak güncellenmesi durumunda kırmızı renkten beyaz renge dönmesini sağlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private void button1_Click(object sender, EventArgs e) { try { cb = new OleDbCommandBuilder(da); da.Update(tablo); MessageBox.Show("Kayıt güncellendi"); renklendir(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } |
Kodlarımızın tamamlanmış hali aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace fatura_takip { public partial class Form1 : Form { public Form1() { InitializeComponent(); } OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.Oledb.12.0;Data Source=dbFatura.accdb"); OleDbDataAdapter da; DataTable tablo = new DataTable(); OleDbCommandBuilder cb; TimeSpan fark; double gunfark; void Listele() { tablo.Clear(); //www.yazilimkodlama.com da = new OleDbDataAdapter("SELECT *From fatura ", bag); da.Fill(tablo); dataGridView1.DataSource = tablo; } void renklendir() { for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { fark = Convert.ToDateTime(dataGridView1.Rows[i].Cells["sontarih"].Value.ToString()) - Convert.ToDateTime(DateTime.Now.ToShortDateString()); gunfark = fark.TotalDays; bool odeme = Convert.ToBoolean(dataGridView1.Rows[i].Cells["odendi"].Value); if (gunfark <= 3 && odeme==false) { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red; } else if (gunfark > 3 && gunfark < 7 && odeme==false) { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Yellow; } else { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.White; } } } private void Form1_Load(object sender, EventArgs e) { label1.Text = DateTime.Now.ToShortDateString(); Listele(); dataGridView1.Columns[0].Visible = false; renklendir(); dataGridView1.Columns[1].HeaderText = "Fatura Cinsi"; dataGridView1.Columns[2].HeaderText = "Fatura Tarihi"; dataGridView1.Columns[3].HeaderText = "Son Ödeme Tarihi"; dataGridView1.Columns[4].HeaderText = "Tutar"; dataGridView1.Columns[5].HeaderText = "Ödeme Yapıldı"; } private void button1_Click(object sender, EventArgs e) { try { cb = new OleDbCommandBuilder(da); da.Update(tablo); MessageBox.Show("Kayıt güncellendi"); renklendir(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } } } |
Siz bu örneği “visual studio” ve “access” in hangi sürümlerinde yaptınız? Çünkü ben “Visual Studio 2019 Community Edition” ve “Access 2021” kullanıyorum ve çalıştır butonuna tıkladığımda “listele” metodu içinde yer alan “da.fill(tablo);” satırında hata veriyor. Bu konuda yardımcı olursanız sevinirim.
İyi çalışmalar.
giriş ekranını nasıl eklıcez
hocam konu süper faydalı oldu hatta benzer konu cok aradım bulamadım şimdi benim sorunum ben ödendi yada ödenmedi bölümüne tik atmak yerine combobox tan çağırıyorum yani orda tik yerine ödendi yada ödenmedi yazarsak nasıl halledicez bu işi
hatta tarihi 3 gün geçenler sarı 7 günü keçenler kırmızı olsa sadece bu bile yeterli beyaz sadece günü gelmeyenler olsa bile olur sadece güne göre çalışsın ödeme durumuna bakmasa da olur şuan icin şimdiden teşekkür ederim