none
DateTable'a Veri Ekleme!!!! Yardım lütfen. RRS feed

  • Soru

  • Merhabalar programımda DataTable nesnesini kullanıp 3 4 tane for döngüsüyle bu datatable'ın içini dolduruyorum. Data grid view'in kaynağınıda datatable yaptım. Buraya kadar herşey normal fakat şöyle bi sorunum var:

    for döngülerinden çıkan değerlerin (2 farklı değer çıkıyor) birisi aynı olabiliyor fakat diğeri farklı oluyor. örnek verecek olursam:

    X        Y         Sıra

    2        56         1

    3        45         2

    3        78         3

    6        23         4

    2        96         5

    Sıra for döngüsünün adımını temsil etmekte, X ID'yi ve Y'de ID'nin değerini temsil etmekte. Ben bu anlık olarak gelen verileri datatable'a şu şekilde kaydetmek istiyorum:

    X        Y 

    2        96

    3        78

    6        23

    yani for döngüsenden çıkan X değeri eğer tabloda yoksa X ve Y değişkenini direk tabloya kaydedicem, eğer for döngüsünden çıkan X değişkeni tabloda varsa Y değişkenini güncelliyicem....

    Bir türlü yapamadım günlerdir uğraşıyorum ama olmuyor. yardım ederseniz çok sevinirim...

    Teşekkürler....



    16 Nisan 2018 Pazartesi 14:38

Yanıtlar

  •         private void AddRow(DataTable dTable, int X, int Y)
            {
                var rows = dTable.Select($"X = {X}");
    
                if (rows.Length == 0)
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                else
                    rows[0]["Y"] = Y;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable dTable = new DataTable();
                dTable.Columns.Add("X", typeof(int));
                dTable.Columns.Add("Y", typeof(int));
                dTable.Columns.Add("Sira", typeof(int));
                AddRow(dTable, 2, 56);
                AddRow(dTable, 3, 45);
                AddRow(dTable, 3, 78);
                AddRow(dTable, 6, 23);
                AddRow(dTable, 2, 96);
                dataGridView1.Columns.Clear();
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dTable;
            }
    


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 07:34
    16 Nisan 2018 Pazartesi 15:10
  • Birinci sorunuzun yanıtı,

            private void AddRow(DataTable dTable, int X, int Y)
            {
                var rows = dTable.Select($"X = {X}");
    
                if (rows.Length == 0)
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                else
                    rows[0]["Y"] = Y;
                Application.DoEvents();
            }

    Application.DoEvents() ifadesi her yeni satır eklendiğinde diğer komutların araya girip çalışmasına izin verir...


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 13:24
    17 Nisan 2018 Salı 08:28
  • İkinci sorunuzun yanıtı,

    private void AddRow(DataTable dTable, int X, int Y)
    {
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlCommand Command = new SqlCommand("UPDATE [TabloAdi] SET [Y]=@Y WHERE [X]=@X", Connection))
            {
                var rows = dTable.Select($"X = {X}");
                if (rows.Length == 0)
                {
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                    Command.CommandText = "INSERT INTO [TabloAdi] ([X], [Y], [Sira]) VALUES (@X, @Y, @Sira)";
                    Command.Parameters.AddWithValue("@Sira", dTable.Rows.Count);
                }
                else
                    rows[0]["Y"] = Y;
                Command.Parameters.AddWithValue("@X", X);
                Command.Parameters.AddWithValue("@Y", Y);
                Connection.Open();
                Command.ExecuteNonQuery();
            }
        }
        Application.DoEvents();
    }



    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    • Düzenleyen MuratAKSARAY 17 Nisan 2018 Salı 09:03
    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 13:53
    17 Nisan 2018 Salı 09:02
  • private bool AddRow(int X, int Y)
    {
        bool ret = false;
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlCommand Command = new SqlCommand("SELECT [X] FROM [TabloAdi] WHERE [X]=@X", Connection))
            {
                Command.Parameters.AddWithValue("@X", X);
                object Exists = Command.ExecuteScalar();
                if (Exists == null)
                    Command.CommandText = "INSERT INTO [TabloAdi] ([X], [Y], [Sira]) VALUES (@X, @Y, (SELECT COUNT(*) FROM [TabloAdi]))";
                else
                    Command.CommandText = "UPDATE [TabloAdi] SET [Y]=@Y WHERE [X]=@X";
                Command.Parameters.AddWithValue("@Y", Y);
                Connection.Open();
                ret = Command.ExecuteNonQuery() > 0;
            }
        }
        Application.DoEvents();
        return ret;
    }
    
    private DataTable Table()
    {
        DataTable ret = new DataTable();
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlDataAdapter Adapter = new SqlDataAdapter("SELECT * FROM [TabloAdi]", Connection))
            {   
                Adapter.Fill(ret);
            }
        }
        return ret;
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
        AddRow(2, 56);
        AddRow(3, 45);
        AddRow(3, 78);
        AddRow(6, 23);
        AddRow(2, 96);
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = Table();
    }



    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 19:28
    17 Nisan 2018 Salı 14:19

Tüm Yanıtlar

  •         private void AddRow(DataTable dTable, int X, int Y)
            {
                var rows = dTable.Select($"X = {X}");
    
                if (rows.Length == 0)
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                else
                    rows[0]["Y"] = Y;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable dTable = new DataTable();
                dTable.Columns.Add("X", typeof(int));
                dTable.Columns.Add("Y", typeof(int));
                dTable.Columns.Add("Sira", typeof(int));
                AddRow(dTable, 2, 56);
                AddRow(dTable, 3, 45);
                AddRow(dTable, 3, 78);
                AddRow(dTable, 6, 23);
                AddRow(dTable, 2, 96);
                dataGridView1.Columns.Clear();
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dTable;
            }
    


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 07:34
    16 Nisan 2018 Pazartesi 15:10
  • Cevap için çok teşşekürler gayet başarılı bir şekilde çalıştırdım bu kodu emeğinize sağlık.

    Şimdi 2 sorum daha var benim sizlere bahsettiğim bu veriler saniyelik olarak sürekli güncellenmekte bu yüzden data gridview de sürekli çok hızlı güncellenen veriler olmuş oluyor bu yüzden mi bilmiyorum ama bir süre sonra program donuyor program üzerindeki hiç bir butona tıklayamıyorum fakat data gridview üzerindeki değişimleri görebiliyorum. Bunun sebebi ve çözümü ne olabilir?

    İkinci olarakta yukarıda bahsettiğim örnekte gelen verileri datatable'a yazmak yerine aynı koşullar çerçevesinde verileri SQL Server'a yazsaydım nasıl bir kod kullanmam gerekirdi? SQL tarafında pek bir bilgim olmadığı için soruyorum.

    Teşekkürler...

    Saygılarımla...

    17 Nisan 2018 Salı 06:19
  • Birinci sorunuzun yanıtı,

            private void AddRow(DataTable dTable, int X, int Y)
            {
                var rows = dTable.Select($"X = {X}");
    
                if (rows.Length == 0)
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                else
                    rows[0]["Y"] = Y;
                Application.DoEvents();
            }

    Application.DoEvents() ifadesi her yeni satır eklendiğinde diğer komutların araya girip çalışmasına izin verir...


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 13:24
    17 Nisan 2018 Salı 08:28
  • İkinci sorunuzun yanıtı,

    private void AddRow(DataTable dTable, int X, int Y)
    {
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlCommand Command = new SqlCommand("UPDATE [TabloAdi] SET [Y]=@Y WHERE [X]=@X", Connection))
            {
                var rows = dTable.Select($"X = {X}");
                if (rows.Length == 0)
                {
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                    Command.CommandText = "INSERT INTO [TabloAdi] ([X], [Y], [Sira]) VALUES (@X, @Y, @Sira)";
                    Command.Parameters.AddWithValue("@Sira", dTable.Rows.Count);
                }
                else
                    rows[0]["Y"] = Y;
                Command.Parameters.AddWithValue("@X", X);
                Command.Parameters.AddWithValue("@Y", Y);
                Connection.Open();
                Command.ExecuteNonQuery();
            }
        }
        Application.DoEvents();
    }



    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    • Düzenleyen MuratAKSARAY 17 Nisan 2018 Salı 09:03
    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 13:53
    17 Nisan 2018 Salı 09:02
  • İkinci sorunuzun yanıtı,

    private void AddRow(DataTable dTable, int X, int Y)
    {
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlCommand Command = new SqlCommand("UPDATE [TabloAdi] SET [Y]=@Y WHERE [X]=@X", Connection))
            {
                var rows = dTable.Select($"X = {X}");
                if (rows.Length == 0)
                {
                    dTable.Rows.Add(X, Y, dTable.Rows.Count);
                    Command.CommandText = "INSERT INTO [TabloAdi] ([X], [Y], [Sira]) VALUES (@X, @Y, @Sira)";
                    Command.Parameters.AddWithValue("@Sira", dTable.Rows.Count);
                }
                else
                    rows[0]["Y"] = Y;
                Command.Parameters.AddWithValue("@X", X);
                Command.Parameters.AddWithValue("@Y", Y);
                Connection.Open();
                Command.ExecuteNonQuery();
            }
        }
        Application.DoEvents();
    }


    yanıtınız için tekrardan teşekkürler denedim fakat olmadı bi türlü sql servera yazdırıyor fakat değerlerin hepsi geliyor. herhangi bir süzdürme yapmıyor. ayrıca sql servera yazdığım için datatable ı ortadan kaldırmak istiyorum artık bu kodu bu istediğim şekilde düzenlemek mümkün mü?

    17 Nisan 2018 Salı 13:57
  • private bool AddRow(int X, int Y)
    {
        bool ret = false;
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlCommand Command = new SqlCommand("SELECT [X] FROM [TabloAdi] WHERE [X]=@X", Connection))
            {
                Command.Parameters.AddWithValue("@X", X);
                object Exists = Command.ExecuteScalar();
                if (Exists == null)
                    Command.CommandText = "INSERT INTO [TabloAdi] ([X], [Y], [Sira]) VALUES (@X, @Y, (SELECT COUNT(*) FROM [TabloAdi]))";
                else
                    Command.CommandText = "UPDATE [TabloAdi] SET [Y]=@Y WHERE [X]=@X";
                Command.Parameters.AddWithValue("@Y", Y);
                Connection.Open();
                ret = Command.ExecuteNonQuery() > 0;
            }
        }
        Application.DoEvents();
        return ret;
    }
    
    private DataTable Table()
    {
        DataTable ret = new DataTable();
        using (SqlConnection Connection = new SqlConnection("Bağlantı metninizi buraya yazın.!.", Connection))
        {
            using (SqlDataAdapter Adapter = new SqlDataAdapter("SELECT * FROM [TabloAdi]", Connection))
            {   
                Adapter.Fill(ret);
            }
        }
        return ret;
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
        AddRow(2, 56);
        AddRow(3, 45);
        AddRow(3, 78);
        AddRow(6, 23);
        AddRow(2, 96);
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = Table();
    }



    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Mr Yavuz 17 Nisan 2018 Salı 19:28
    17 Nisan 2018 Salı 14:19
  • çok çok teşekkür ederim emeğinize sağlık allah razı olsun sayenizde çözdüm.
    17 Nisan 2018 Salı 19:28