En iyi yanıtlayıcılar
DataTable satırlarının alta kayması sorunu.

Soru
-
Herkese selam,
Veri tabanımdan çektiğim veriler ile işlemleri yapıp değerler elde ediyorum. Bir adet ekle butonu ile yaptığım seçimler sonucunda bir sütun altında, verileri alt alta yazdırmak istiyorum. Seçimleri yapıp ekle butonu ile tabloya eklediğim zaman, yeni sütun oluşturup verileri altına yazacak. Fakat, sütun eklendikten sonra, önceki eklediğim sütunun satırları alta kayıyor, yerlerini korumuyorlar. Bu yüzden, veriler sanki çapraz eklenmiş gibi gözüküyor. Fakat yan yana eklesin istiyorum.
Verileri tabloya aktardığım kısımın kodları, bu kodlar ekle butonu click olayı içerisinde;
tablo.Columns.Add(textBox4.Text);
DataRow row1 = tablo.NewRow();
DataRow row2 = tablo.NewRow();
DataRow row3 = tablo.NewRow();
row1[textBox4.Text] = "Ali";
tablo.Rows.InsertAt(row1,0);
row2[textBox4.Text] = "Veli";
tablo.Rows.InsertAt(row2,1);
row3[textBox4.Text] = "Mehmet";
tablo.Rows.InsertAt(row3,2);
dataGridView1.DataSource = tablo;TextBox4, sütun adını girdiğim kısım.
Nasıl bir yol izlemem gerekiyor, nerede yanlış yapıyorum yardımcı olabilir misiniz?
Şimdiden teşekkür ederim.
Yanıtlar
-
Dogrusunu isterseniz hic anlamadim sutunlari tekrar etmenin faydasini. En iyisi ben komple bir ornek vereyim siz onun uzerinden devam edin:
void Main() { Form f = new Form { Height = 600, Width = 800 }; Button b = new Button {Text="Sutun ekle", Top=10, Left=10}; DataGridView dgv = new DataGridView {AllowUserToAddRows=false, Top=50, Left=10, Height=500, Width=750}; f.Controls.Add(b); f.Controls.Add(dgv); f.Load += (sender, e) => { f.Text = "GearBOX SELECTION"; dgv.Columns.Add("Sutun1", "1'nci Kolon"); dgv.Rows.Add("Buraya string bir değer gelecek"); dgv.Rows.Add("Tanım"); dgv.Rows.Add("falan filan"); }; b.Click += (sender, e) => { var index = dgv.ColumnCount; dgv.Columns.Add($"Sutun{index+1}", $"Kolon #{index+1}"); for (int i = 0; i < 3; i++) { dgv.Rows[i].Cells[index].Value = $"Tekrar #{index+1}"; } }; f.ShowDialog(); }
Not: Bu kodu dogrudan LinqPad'e koyup calistirabilirsiniz, sadece Windows.Forms eklemeniz gerekli.
Blog
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.- Düzenleyen CetinBasozEditor 3 Eylül 2020 Perşembe 15:50
- Yanıt Olarak İşaretleyen Furkan Kuloğlu 3 Eylül 2020 Perşembe 21:08
-
private void Form1_Load(object sender, EventArgs e) { this.Text = "GearBOX SELECTION"; comboBox1.Items.Clear(); comboBox2.Items.Clear(); comboBox3.Items.Clear(); radioButton11.Checked = true; radioButton12.Checked = true; DataGridViewTextBoxColumn ad = new DataGridViewTextBoxColumn(); dataGridView1.Columns.Add(ad); ad.HeaderText = "1'nci Kolon"; string[] row1 = new string[]{ "Deneme" }; string[] row2 = new string[] { "Deneme2" }; string[] row3 = new string[] { "Deneme3" }; dataGridView1.Rows.Add(row1); dataGridView1.Rows.Add(row2); dataGridView1.Rows.Add(row2); } }
Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz
- Yanıt Olarak İşaretleyen Furkan Kuloğlu 3 Eylül 2020 Perşembe 21:08
Tüm Yanıtlar
-
Bu kodu denermisin deneme şansım olamdı
int colIndex = dgw.ColumnCount + 1; dgw.Columns.Add("Col" + colIndex, textBox4.Text); dgw.Rows[0].Cells[colIndex].Value = "ALİ"; dgw.Rows[1].Cells[colIndex].Value = "VELİ"; dgw.Rows[2].Cells[colIndex].Value = "MEHMET";
Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz
-
Cevabınız için teşekkür ederim kodu denedim fakat out of range hatası aldım. Bunu daha önce de almıştım, fakat çözemedim
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'
-
colIndex--;
dgw.Rows[0].Cells[colIndex]...
Not: Index 0'dan basliyor, o nedenle yeni eklenenin indexi ColumnCount (ColumnCount+1 degil - oradan 1'i kaldirsaniz da olur.).
Blog
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.- Düzenleyen CetinBasozEditor 3 Eylül 2020 Perşembe 10:29
- Yanıt Olarak Öneren Ferit Gezgil 3 Eylül 2020 Perşembe 10:34
-
son halini toparlayalım
dgw.Columns.Add("Col" + dgw.ColumnCount, textBox4.Text); dgw.Rows[0].Cells[dgw.ColumnCount-1].Value = "ALİ"; dgw.Rows[1].Cells[dgw.ColumnCount-1].Value = "VELİ"; dgw.Rows[2].Cells[dgw.ColumnCount-1].Value = "MEHMET";
Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz
-
ferit bey yardımlarınız için teşekkür ederim fakat aynı hatayı almaya devam ediyorum,
yanlış bir yoldayım heralde, yada düşüncem mi yanlış bilemedim.
formdan girdiğim verileri datagrid e yan yana sütunlar halinde eklemenin bir başka yolu var mı acaba
internetten başka örnekler de aradım fakat bulamadım
-
Ben soruyu simdiye kadar yeni bir kolonda alt alta diye algilamistim. Megerse, yan yana kolonlardaymis.
Ne istediginizi ornekle aciklarsaniz, anlasilma sansi olur.
(Yan yana pek de mantikli gorunmedi ama)
Blog
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.- Düzenleyen CetinBasozEditor 3 Eylül 2020 Perşembe 13:00
-
çetin hocama katılıyorum. kodlarınızı biraz daha geniş paylaşmanızı, ve daha detaylı bir anlatım yapmanızı rica ediyorum.
benimde anladığım şuydu, tablonuza bir sütün ekleyip verileri alt alta yeni sütuna yazacağınızı sandım. farklı bir durumsa lütfen varsa olmasını istediğiniz yapıyı anlatan bir ekran görüntü ekleyin.
AYRICA BİR DENEME YAPTIM VE KODLAR DOĞRU BİR ŞEKİLDE ÇALIŞIYOR.
TABLONUZDA 3 SATIR OLMASI GEREKİYOR, EĞER TAMAMEN BOŞ BİR TABLODA DENİYORSANIZ INDEX HATASI ALABİLİRSİNİZ.
dataGridView1.Columns.Add("Col" + dataGridView1.ColumnCount, textBox4.Text); dataGridView1.Rows[0].Cells[dataGridView1.ColumnCount-1].Value = "ALİ"; dataGridView1.Rows[1].Cells[dataGridView1.ColumnCount - 1].Value = "VELİ"; dataGridView1.Rows[2].Cells[dataGridView1.ColumnCount - 1].Value = "MEHMET";
Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz
- Düzenleyen Ferit Gezgil 3 Eylül 2020 Perşembe 13:26
-
Yukarıdaki ilk yazmış olduğum kodlar ile yaptığım zaman, butona ilk tıkladığımda eklediği veriler böyle görünüyor,
Daha sonra ekleme yaptığımda misal 3. tıkladığımda ilk eklediği sütunlar aşağıya doğru kayıyor.
ama benim istediğim her seferinde yan yana eklemesi, satırları aşağıya kaydırmadan, ben textboxlara ne yazdıysam onları ekleyecek.
Mesela Ferit beyin dediği şekilde deneme yapmak için kodları load'a yazdım açılınca tablo görünsün diye ama, şu kodları yazdığım zaman aynı hatayı alıyorum. Index hatası veriyor load event'da, başta 3 adet row'u nasıl elde edebilirim ki boş grid olmaması için.
private void Form1_Load(object sender, EventArgs e) { this.Text = "GearBOX SELECTION"; comboBox1.Items.Clear(); comboBox2.Items.Clear(); comboBox3.Items.Clear(); radioButton11.Checked = true; radioButton12.Checked = true; DataGridViewTextBoxColumn ad = new DataGridViewTextBoxColumn(); dataGridView1.Columns.Add(ad); ad.HeaderText = "1'nci Kolon"; dataGridView1.Rows[0].Cells[0].Value = "Buraya string bir değer gelecek"; dataGridView1.Rows[1].Cells[0].Value = "Tanım"; dataGridView1.Rows[2].Cells[0].Value = "falan filan"; } }
-
Dogrusunu isterseniz hic anlamadim sutunlari tekrar etmenin faydasini. En iyisi ben komple bir ornek vereyim siz onun uzerinden devam edin:
void Main() { Form f = new Form { Height = 600, Width = 800 }; Button b = new Button {Text="Sutun ekle", Top=10, Left=10}; DataGridView dgv = new DataGridView {AllowUserToAddRows=false, Top=50, Left=10, Height=500, Width=750}; f.Controls.Add(b); f.Controls.Add(dgv); f.Load += (sender, e) => { f.Text = "GearBOX SELECTION"; dgv.Columns.Add("Sutun1", "1'nci Kolon"); dgv.Rows.Add("Buraya string bir değer gelecek"); dgv.Rows.Add("Tanım"); dgv.Rows.Add("falan filan"); }; b.Click += (sender, e) => { var index = dgv.ColumnCount; dgv.Columns.Add($"Sutun{index+1}", $"Kolon #{index+1}"); for (int i = 0; i < 3; i++) { dgv.Rows[i].Cells[index].Value = $"Tekrar #{index+1}"; } }; f.ShowDialog(); }
Not: Bu kodu dogrudan LinqPad'e koyup calistirabilirsiniz, sadece Windows.Forms eklemeniz gerekli.
Blog
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.- Düzenleyen CetinBasozEditor 3 Eylül 2020 Perşembe 15:50
- Yanıt Olarak İşaretleyen Furkan Kuloğlu 3 Eylül 2020 Perşembe 21:08
-
private void Form1_Load(object sender, EventArgs e) { this.Text = "GearBOX SELECTION"; comboBox1.Items.Clear(); comboBox2.Items.Clear(); comboBox3.Items.Clear(); radioButton11.Checked = true; radioButton12.Checked = true; DataGridViewTextBoxColumn ad = new DataGridViewTextBoxColumn(); dataGridView1.Columns.Add(ad); ad.HeaderText = "1'nci Kolon"; string[] row1 = new string[]{ "Deneme" }; string[] row2 = new string[] { "Deneme2" }; string[] row3 = new string[] { "Deneme3" }; dataGridView1.Rows.Add(row1); dataGridView1.Rows.Add(row2); dataGridView1.Rows.Add(row2); } }
Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz
- Yanıt Olarak İşaretleyen Furkan Kuloğlu 3 Eylül 2020 Perşembe 21:08