none
DataTable satırlarının alta kayması sorunu. RRS feed

  • 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.

    3 Eylül 2020 Perşembe 09:06

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.


    3 Eylül 2020 Perşembe 15:47
    Yanıtlayıcı
  • 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
    3 Eylül 2020 Perşembe 15:49

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

    3 Eylül 2020 Perşembe 10:07
  • 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'


    3 Eylül 2020 Perşembe 10:25
  • 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.


    3 Eylül 2020 Perşembe 10:27
    Yanıtlayıcı
  • 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

    3 Eylül 2020 Perşembe 10:36
  • 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

    3 Eylül 2020 Perşembe 11:26
  • 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.


    3 Eylül 2020 Perşembe 12:59
    Yanıtlayıcı
  • ç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




    3 Eylül 2020 Perşembe 13:22
  • 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"; } }

    3 Eylül 2020 Perşembe 14:32
  • 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.


    3 Eylül 2020 Perşembe 15:47
    Yanıtlayıcı
  • 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
    3 Eylül 2020 Perşembe 15:49