C# Datagridview Problemi
-
Selamlar, 1 saattir bi hatayı çözmeye çalışıyorum ve şimdi hatayı tespit etmiş bulunmaktayım. Ama hata mı yoksa çok çalışmaktan dolayı ben mi bi sıkıntı yaratıyorum anlayamadım..
şimdi normalde olması gereken şöyle bi şey

kodu da şu
for (int i = 0; i < 4; i++) { dgCustomers.Rows.Add(new object[] { true, "Ali", "435435", i }); }görüldüğü gibi gayet sıkıntısız.. Ama ben excelden çekiyorum bu veriyi..
ve sorun orada başlıyor.. try catch de koydum hani belki istisna oluşuyordur v.s. ama bi şey de yakalanmadı.. şimdi kod şöyle
try { using (var dlg = new OpenFileDialog()) { dlg.Filter = "Excel Dosyası(*.xls,*.xlsx)|*.xls;*.xlsx;"; if (dlg.ShowDialog() != DialogResult.OK) return; var result = DbHelper.ConvertExcelToDataTable(dlg.FileName); //foreach (DataRow row in result.Rows) //{ // // if (row[0].ToString() == "") continue; // // if (row[1] == null) continue; // // tmp1 = row.ItemArray.Count() == 2 ? "" : row[2].ToString().Trim(); // // dgCustomers.Rows.Add(new object[]{true, row[0].ToString().Trim(), row[1].ToString().Trim(),tmp1}); //} } } catch (Exception ez) { }for (int i = 0; i < 4; i++) { dgCustomers.Rows.Add(new object[] { true, "Ali", "435435", i }); }görüldüğü gibi alttaki for harici dgCustomers gridview i ile ilgili çalışan bi kod yok ama şöyle oluyor..

gride aynı for kodunu kullanmama rağmen seçili kolonu bool olarak işlem görmüyor. bi de scrollbar da başka bi şey olmuş gibi :))
var result = DbHelper.ConvertExcelToDataTable(dlg.FileName);
sıkıntı burdan kaynaklanıyor. Ama bunun gridview ile bi ilgisi yok. kodları da burda
public static DataTable ConvertExcelToDataTable(string FilePath) { string strConn = string.Empty; if (FilePath.Trim().EndsWith(".xlsx")) { strConn = string.Format( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath); } else if (FilePath.Trim().EndsWith(".xls")) { strConn = string.Format( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath); } OleDbConnection conn = null; OleDbCommand cmd = null; OleDbDataAdapter da = null; DataTable dt = new DataTable(); try { conn = new OleDbConnection(strConn); conn.Open(); cmd = new OleDbCommand(@"SELECT * FROM [Sayfa1$]", conn); cmd.CommandType = CommandType.Text; da = new OleDbDataAdapter(cmd); da.Fill(dt); } catch (Exception exc) { MessageBox.Show("Excel dosyası okunurken şu hata oluştu:" + exc.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { if (conn.State == ConnectionState.Open) conn.Close(); conn.Dispose(); cmd.Dispose(); da.Dispose(); } return dt; }Şimdi benim aklıma bu metod statik diye böyle bi şey yapıyor diye geliyor? Böyle saçma bi şeyle ilk kez karşılaştım. Grid ile hiç bir alakası olmayan kod neden böyle bi şey yapıyor. Benzer olayı aynı programda farklı bir gridde de yapıyor ama sadece excelden okutunca.
Şimdi bu metodun statikliğini kaldırıp deneyeceğim bir de gridview e kolonları harici olarak ekleyip deneyeceğim.. bunun haricinde ne olabilir?
bu gride ben metin belgesinden, ya da bir db den ya da bir list<benimsınıf> kaynağından veri çekiyorum, hiç bir problem yok ama bu excelde böyle yaptı.. fikri olan var mı
-
statik i sildim ama yine aynı sonuç.. şimdi harici kolon oluşturayım bakayım.
benim kafa gitti ya:) zaten kolonları form tarafında oluşturmuşum gridview in içinde.
neyse veriyi eklemeden önce ve sonra 1. kolonun tipine tekrar baktım checkbox diyor. ve görüldüğü gibi new object[] de 0. indexli değer direk
boolean bir değer. zaten kodda sıkıntı yok, olsaydı çalışmazdı. ne zaman ki o excel convert metodunu çalıştırdım ondan sonra o kısım uçuyor..
fikri olan varsa paylaşırsa sevinirim, aklıma başka bi şey gelmiyor daha
unbalanced tarafından 08/Eki/13 02:18 tarihinde düzenlenmiştir -
abü checkbox'ın özelliğinden falseValue ve trueValue 0 1 yapıp dener misin?
onla alakalı olabilir ?
bide dbdeki alan adını evet/hayır olarak tutuyosun dimi?
saybirs tarafından 08/Eki/13 02:25 tarihinde düzenlenmiştir -
yok hocam aynı oldu..
sıkıntı o fonksiyondan kaynaklı. onun yaptığı bi şey diğerini etkilyor ama ne alaka.. mesela o excel convert fonksiyonun direk ilk başına return new DataTable(); yaptım çalıştı. demek ki oradaki table dolunca bi şekilde gridview e etki ediyor..
edit: db den çekmiyorum veriyi, excelden çekiyorum ve bu veriyi excelden almıyorum elle giriyorum. en alttaki for döngüsüne bak, sadece true var ilk kolon için
edit2: o fonksiyonda return dt yerine return new DataTable(); dedim yine aynısı oldu. demek ki dönen değer flan önemli değil. excel okurken grid etkileniyor. excel okumada da bir problem yok
unbalanced tarafından 08/Eki/13 02:32 tarihinde düzenlenmiştir -
olayı çözmüş bulunmaktayım. bu kadar aptalca bi şey olabilir. xlsx formatlı excel dosyalarını okutunca aynı sonuç oldu ama dosyayı 97-2003 formatına yani xls formatına çevirdim çalıştı. bunla ne alakası var ki sorunun. hadi kodda hata var da okuyamıyor desek neyse ama xlsx i de okuyup verilerini alıyor..
-
epplus diye bi dll kullandım. bununla excel driver ına gerek kalmadan (excel yüklü olmasına gerek yok o bilgisayarda), excel dosyaları okunup yazılabiliniyor. yazma içn bunu kullanmıştım ama okuma için ado.net den faydalanalım dedik. nedense xlsx de sıknıtı çıktı yani onun suçu yok ama grid i etkiliyor.. şimdi epplus ile yaptım sıkıntı yok..
http://stackoverflow.com/a/13396787/1022138
edit: bu da xls yi okumuyormuş. mecburen xls için ado.net, diğeri için de epplus kullanacağım :S
unbalanced tarafından 08/Eki/13 03:20 tarihinde düzenlenmiştir -
xls eski tip, xlsx de yeni tip format. xlsx aslında xml dosyalarını barındıran arşivden ibaret. Fark bundan kaynaklanıyor olabilir.
-
tamam hocam da ne alakası var, ben gridview e dönen değerleri eklemiyorum ki. koda bakarsan manuel olarak for döngüsünde veri ekliyorum. bu excelden bi şeyi okutup databale döndermem ve bunu hiç bir yerde kullanmamam gridi neden etkilesin ki
-
ya bu grid ile başım dertte.. şimdi fark ettim checkbox un değerini kaldırıyorum sonra başka bi satıra ya da başka yere tıklıyorum eski haline geri geliyor.. diğer değerleri değiştirince sıkıntı yok ama sadece checkboxu değiştirince bu oluyor. başka yerde de bi değişiklik yapmadım
üstte gördüğünüz kod var..
neyse belki vardır bi şeyi dedim, cellcontent click eventine de bi kod yazdım içeriği false yapıyor ama edit bittikten sonra eski haline geri dönüyor.
yazdığım kod bu
private void dgCustomers_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0) { if (dgCustomers.CurrentCell.Value == null) dgCustomers.CurrentCell.Value = true; else if (dgCustomers.CurrentCell.Value.ToString()=="") dgCustomers.CurrentCell.Value = true; else dgCustomers.CurrentCell.Value = !(bool)dgCustomers.CurrentCell.Value; } }işin ilginci formda başka gridler de var, onlarda bu tarz bi sorun yok.. gridin datasource una da bi şey yapmadım direk manuel olarak ekliyorum (ilk mesajımda örnek for döngüsü var)
aptal saptal sorunlar çıkıyor, acaba sıkıntı ne olabilir.. gridin özelliklerinde editlemeye izin verdim zaten izin vermesem diğer kolonlar editlenemezdi ama sadece checkbox editlenemiyor daha doğrusu editleniyor ama başka yere tıkladığımda geri geliyor. onu öyle yapacak her hangi bir kod da yok..
edit: tamamdır halettim. kolonu silip tekrar ekledim.. hani aynı özellikte olan kolonlar bunlar. read only falan hep false.. ilginç şeyler oluyor..
unbalanced tarafından 09/Eki/13 22:38 tarihinde düzenlenmiştir
