En iyi yanıtlayıcılar
Datagridview deki CurrentRow Değerini Değiştirmek icin Ne Yapmalı?

Soru
-
Öncelikle yaptığım şeyden bahsedeyim;
Bir Datagridview'im var ve SQL'den, DataTable oluşturarak tablomu görüntületiyorum. Datagridview'in CellMouseClick olayından da, e.Rowindex'i mousedeger adlı değişkene aktarıyorum. DataGridViewEditingControlShowingEventArgs ile Datagridview içindeyken, klavye tuşlarından Keys.Up ve Keys.Down ile yaptığım tuşlamalarda, mousedeger'in değişmesini sağlayarak, mousedeger'e ait row içeriğini Form2 üzerinde görüntületiyorum.
Daha sonra Datagrid tablomun yanına, iki tane picturebox ekledim; tablo içinde bir evvelki ve bir sonraki satırları seçtirmek maksadıyla.. Click olaylarında da, mousedeger değişkenimi güncelleterek tablo içinde seçimimi yaptırdım. Ardından, görüntülemek istediğimi de yine Form2'de görüntüleyebildim.
Şimdi, bu yaptıklarım ve klavye ileri geri hareketlerim gayet düzgün bir şekilde istediklerimi yerine getirdi. Fakat, bu Datagridview tablosunun içerisinde klavyeyle aşağıya inerken veya tam tersini yaparken oluşturmuş olduğum picturebox'lara tıkladığımda, mousedeger'i güncellettirip seçime devam edebiliyorken, picturebox'a basmayı bırakıp, tekrardan klavyenin yukarı, aşağı butonlarına bastığım zaman, picturebox ile 5. elemana gelsem bile, en son kaldığı yer 2. elemandı diyelim, bu satırdan öncekini veya sonrakini seçtirebiliyorum.
Bir takım denemeler sonucunda da, picturebox'lara tıkladığımda datagridview.currentrow.index değerinin değişmediğini anladım. Ne yaptıysam da bir türlü değiştirtemedim. Yani, mousedeger ile aynı tablo içinde farklı satır seçtirdiğimde, currentrow.index değerinin, normal şartlarda değişmesi lazımken, mousedeger'inden bağımsız hareket etmesini bir türlü çözemedim.
Net'te araştırırken, satır silip eklemeli bir çözüm vardı fakat, sql'den çektiğim datatable'ı datagridview üzerinde gösterttiğimden dolayı hata verdi. Zaten bu olay daha çok satır taşırken yapılıyor sanırım. Belki, insert into ile komut yazarak yaparım da anlamsız böyle bir iş için.. Alt tarafı seçim yaptıracağım o kadar..
Bunun yanı sıra, datatable'ı Clear'layıp, datagrid'i yeniden doldurup istediğimi seçtirebilirim fakat, gene, böyle önemsiz bir şey için, lüzumsuz bir işlem yaptırmış olurum diye düşündüğümden bunu da geçiyorum.
Biliyorum gereksiz bir şeymiş gibi gelebilir ama bunun basit bir çözümü var mı merak ediyorum. Kod filan istemeyin lütfen.. Bu currentrow'un değişmemesinin nedenini, değişebilir ise nasıl olduğunu merak ediyorum sadece..
Bir de, açılışta oluşturmuş olduğum datatable üzerinde çalışıyorum. Yeni bir örnek almadan, aynı tablo üzerinde istediğimi gerçekleştirmeye çalışıyorum, bunu da belirteyim..
- Düzenleyen Önder Gazioğlu 20 Nisan 2019 Cumartesi 20:09
Yanıtlar
-
Kod istemeyelim tamam da o zaman problemin anlasilmiyor, netde bulduğun cozum garipmis :)
void Main() { DataTable tbl = new DataTable(); using (SqlConnection con = new SqlConnection(@"server=.\SQLExpress;Database=Northwind;Trusted_connection=yes;")) using (SqlCommand cmd = new SqlCommand(@"select * from Customers", con)) { con.Open(); tbl.Load(cmd.ExecuteReader()); con.Close(); } Form f = new Form {Height=600,Width=800}; DataGridView dgv = new DataGridView { Height = 450, Width = 800, DataSource=tbl}; Button up = new Button { Top = 500, Width = 100, Text = "Onceki" }; Button down = new Button { Top = 500, Width = 100, Text = "Sonraki", Left = 140 }; f.Controls.AddRange(new Control[] {up,down,dgv}); f.Load += (sender, e) => { EnableUpDown(up, down, dgv); }; up.Click += (sender, e) => { ChangeRow(dgv, -1); EnableUpDown(up, down, dgv); }; down.Click += (sender, e) => { ChangeRow(dgv, 1); EnableUpDown(up, down, dgv); }; f.Show(); } void EnableUpDown(Button up, Button down, DataGridView dgv) { up.Enabled = dgv.CurrentCell.RowIndex > 0; down.Enabled = dgv.CurrentCell.RowIndex < dgv.Rows.Count - 1; } void ChangeRow(DataGridView dgv, int v) { if ((v == 1 && dgv.CurrentCell.RowIndex < dgv.Rows.Count-1) || (v == -1 && dgv.CurrentCell.RowIndex > 0)) { dgv.CurrentCell = dgv[0, dgv.CurrentCell.RowIndex + v]; } }
- Düzenleyen CetinBasozEditor 21 Nisan 2019 Pazar 15:04
- Yanıt Olarak İşaretleyen Önder Gazioğlu 22 Nisan 2019 Pazartesi 19:21
Tüm Yanıtlar
-
Kod istemeyelim tamam da o zaman problemin anlasilmiyor, netde bulduğun cozum garipmis :)
void Main() { DataTable tbl = new DataTable(); using (SqlConnection con = new SqlConnection(@"server=.\SQLExpress;Database=Northwind;Trusted_connection=yes;")) using (SqlCommand cmd = new SqlCommand(@"select * from Customers", con)) { con.Open(); tbl.Load(cmd.ExecuteReader()); con.Close(); } Form f = new Form {Height=600,Width=800}; DataGridView dgv = new DataGridView { Height = 450, Width = 800, DataSource=tbl}; Button up = new Button { Top = 500, Width = 100, Text = "Onceki" }; Button down = new Button { Top = 500, Width = 100, Text = "Sonraki", Left = 140 }; f.Controls.AddRange(new Control[] {up,down,dgv}); f.Load += (sender, e) => { EnableUpDown(up, down, dgv); }; up.Click += (sender, e) => { ChangeRow(dgv, -1); EnableUpDown(up, down, dgv); }; down.Click += (sender, e) => { ChangeRow(dgv, 1); EnableUpDown(up, down, dgv); }; f.Show(); } void EnableUpDown(Button up, Button down, DataGridView dgv) { up.Enabled = dgv.CurrentCell.RowIndex > 0; down.Enabled = dgv.CurrentCell.RowIndex < dgv.Rows.Count - 1; } void ChangeRow(DataGridView dgv, int v) { if ((v == 1 && dgv.CurrentCell.RowIndex < dgv.Rows.Count-1) || (v == -1 && dgv.CurrentCell.RowIndex > 0)) { dgv.CurrentCell = dgv[0, dgv.CurrentCell.RowIndex + v]; } }
- Düzenleyen CetinBasozEditor 21 Nisan 2019 Pazar 15:04
- Yanıt Olarak İşaretleyen Önder Gazioğlu 22 Nisan 2019 Pazartesi 19:21
-
Kod istemeyelim tamam da o zaman problemin anlasilmiyor, netde bulduğun cozum garipmis :)
void Main() { DataTable tbl = new DataTable(); using (SqlConnection con = new SqlConnection(@"server=.\SQLExpress;Database=Northwind;Trusted_connection=yes;")) using (SqlCommand cmd = new SqlCommand(@"select * from Customers", con)) { con.Open(); tbl.Load(cmd.ExecuteReader()); con.Close(); } Form f = new Form {Height=600,Width=800}; DataGridView dgv = new DataGridView { Height = 450, Width = 800, DataSource=tbl}; Button up = new Button { Top = 500, Width = 100, Text = "Onceki" }; Button down = new Button { Top = 500, Width = 100, Text = "Sonraki", Left = 140 }; f.Controls.AddRange(new Control[] {up,down,dgv}); f.Load += (sender, e) => { EnableUpDown(up, down, dgv); }; up.Click += (sender, e) => { ChangeRow(dgv, -1); EnableUpDown(up, down, dgv); }; down.Click += (sender, e) => { ChangeRow(dgv, 1); EnableUpDown(up, down, dgv); }; f.Show(); } void EnableUpDown(Button up, Button down, DataGridView dgv) { up.Enabled = dgv.CurrentCell.RowIndex > 0; down.Enabled = dgv.CurrentCell.RowIndex < dgv.Rows.Count - 1; } void ChangeRow(DataGridView dgv, int v) { if ((v == 1 && dgv.CurrentCell.RowIndex < dgv.Rows.Count-1) || (v == -1 && dgv.CurrentCell.RowIndex > 0)) { dgv.CurrentCell = dgv[0, dgv.CurrentCell.RowIndex + v]; } }
Aradığım şey, yazmış olduğunuz son satırdı. Onu da picturebox mouseclick'in scope'una
şu şekilde uyarlayarak yazdım oldu;
this.dataGridView1.CurrentCell = this.dataGridView1[1,mousedeger]
Ayrıca, rowheader'ın görünürlüğünü kapattığım için midir bilemiyorum, kolon satırı
1 yerine 0 olduğunda "geçerli hücre görünmez bir hücreye ayarlanamaz" diye hata verdi.
Aynı sorunu yaşayacak olanlara şimdiden belirteyim.
Kusura bakmayın, yeni cevap verebilme şansım oldu.. Teşekkürler yardımınız için..