En iyi yanıtlayıcılar
DateTable'a Veri Ekleme!!!! Yardım lütfen.

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....
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
-
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
-
İ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
-
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
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
-
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...
-
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
-
İ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
-
İ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ü?
-
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
-