|
|
|
ลูป for ในการ remove datagridview เมื่อเลือกแล้ว ลบหลายๆอัน |
|
|
|
|
|
|
|
Code (C#)
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 25; i++)
{
dataGridView1.Rows.Add(false, "Test A " + i, "Test B " + i, "Test C " + i);
}
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount-1; i++)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView2.Rows.Add(false, dataGridView1[1, i].Value, dataGridView1[2, i].Value, dataGridView1[1, i].Value);
dataGridView1.Rows.RemoveAt(i);
}
}
}
}
}
ผมไม่รู้สาเหตุเกิดจากอะไรแต่
Code (C#)
foreach (DataGridViewRow item in dataGridView1.Rows)
มันจะลบได้ที่ count-1
แต่ Code (C#)
for (int i = 0; i < dataGridView1.RowCount-1; i++)
ใช้ได้ครับ
|
|
|
|
|
Date :
2015-09-17 15:04:36 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
foreach (DataGridViewRow item in dataGridView1.Rows)
คือไห้เขียนนอกหรอครับ คือผมลองแล้วก็ยังไม่ได้นะครับ มันไปไม่หมดตามที่ติกอ่าครับ ตามโค๊ด ในปุ่ม button1_Click เลยครับ
|
|
|
|
|
Date :
2015-09-17 15:47:05 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้พอเข้าใจครับ แต่คือผม new โปรเจคมาไหม่แล้วเอาโค๊ด ที่คุณมาแปะเลยนะมันยัง ไปทีละ 2ตัวครับแล้วเหลือตัวสุดท้ายไม่สามารถเอาออกจาก grid1 ได้เลยอ่าครับ (คือมันก็ไม่ได้เหมือนกันครับ)
|
|
|
|
|
Date :
2015-09-17 16:30:11 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จะย้ายข้อมูลจาก datagrid1 ==> datagrid2
แล้วจะลบข้อมูลใน datagrid1 ทิ้งใช่ไหมครับ
เวลาลบข้อมูลใน datagrid1 ให้ลบจากแถวสุดท้ายไปหาแถวแรกครับ
|
|
|
|
|
Date :
2015-09-17 16:33:41 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอจะมีตัวอย่างไหมครับ
|
|
|
|
|
Date :
2015-09-17 16:38:51 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
นี่ล่าสุดครับCode (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=ADMIN;Initial Catalog=BTEC_MANAGEMENT;User ID=Programmer;Password=1234");
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select private_code, product_code, serial,name, unit_name, description, remark, add_date FROM products", conn);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = false;
dataGridView1.Rows[n].Cells[1].Value = item["private_code"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["product_code"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["serial"].ToString();
dataGridView1.Rows[n].Cells[4].Value = item["name"].ToString();
dataGridView1.Rows[n].Cells[5].Value = item["unit_name"].ToString();
dataGridView1.Rows[n].Cells[6].Value = item["description"].ToString();
dataGridView1.Rows[n].Cells[7].Value = item["remark"].ToString();
dataGridView1.Rows[n].Cells[8].Value = item["add_date"].ToString();
}
conn.Close();
}
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
if ((bool)dataGridView1.SelectedRows[0].Cells[0].Value == false)
{
dataGridView1.SelectedRows[0].Cells[0].Value = true;
}
else
{
dataGridView1.SelectedRows[0].Cells[0].Value = false;
}
}
private void button1_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView2.Rows.Add();
dataGridView2.Rows[n].Cells[0].Value = false;
dataGridView2.Rows[n].Cells[1].Value = item.Cells[1].Value.ToString();
dataGridView2.Rows[n].Cells[2].Value = item.Cells[2].Value.ToString();
dataGridView2.Rows[n].Cells[3].Value = item.Cells[3].Value.ToString();
dataGridView2.Rows[n].Cells[4].Value = item.Cells[4].Value.ToString();
dataGridView2.Rows[n].Cells[5].Value = item.Cells[5].Value.ToString();
dataGridView2.Rows[n].Cells[6].Value = item.Cells[6].Value.ToString();
dataGridView2.Rows[n].Cells[7].Value = item.Cells[7].Value.ToString();
dataGridView2.Rows[n].Cells[8].Value = item.Cells[8].Value.ToString();
}
foreach (DataGridViewRow item2 in dataGridView1.Rows)
{
for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
{
dataGridView2.Rows.Add();
}
}
}
}
//foreach (DataGridViewRow item in dataGridView1.Rows)
//{
// if ((bool)item.Cells[0].Value == true)
// {
// dataGridView2.Rows.Remove(item);
// }
//}
}
private void button2_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow item in dataGridView2.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = false;
dataGridView1.Rows[n].Cells[1].Value = item.Cells[1].Value.ToString();
dataGridView1.Rows[n].Cells[2].Value = item.Cells[2].Value.ToString();
dataGridView1.Rows[n].Cells[3].Value = item.Cells[3].Value.ToString();
dataGridView1.Rows[n].Cells[4].Value = item.Cells[4].Value.ToString();
dataGridView1.Rows[n].Cells[5].Value = item.Cells[5].Value.ToString();
dataGridView1.Rows[n].Cells[6].Value = item.Cells[6].Value.ToString();
dataGridView1.Rows[n].Cells[7].Value = item.Cells[7].Value.ToString();
dataGridView1.Rows[n].Cells[8].Value = item.Cells[8].Value.ToString();
}
}
foreach (DataGridViewRow item in dataGridView2.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
if (item.Selected == true)
{
dataGridView2.Rows.Remove(item);
}
}
}
}
}
}
|
|
|
|
|
Date :
2015-09-18 09:13:17 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือเป็นแบบนี้นะครับ คือในรูปมัน add ได้ 2ตัวจริง แต่มันยังเหลือตัวข้างบนอีก1ตัว อะครับ
|
|
|
|
|
Date :
2015-09-18 09:49:05 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้โค๊ด ครับ
Code (C#)
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView2.Rows.Add();
dataGridView2.Rows[n].Cells[0].Value = false;
dataGridView2.Rows[n].Cells[1].Value = item.Cells[1].Value.ToString();
dataGridView2.Rows[n].Cells[2].Value = item.Cells[2].Value.ToString();
dataGridView2.Rows[n].Cells[3].Value = item.Cells[3].Value.ToString();
dataGridView2.Rows[n].Cells[4].Value = item.Cells[4].Value.ToString();
dataGridView2.Rows[n].Cells[5].Value = item.Cells[5].Value.ToString();
dataGridView2.Rows[n].Cells[6].Value = item.Cells[6].Value.ToString();
dataGridView2.Rows[n].Cells[7].Value = item.Cells[7].Value.ToString();
dataGridView2.Rows[n].Cells[8].Value = item.Cells[8].Value.ToString();
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView2.Rows.Add(false, dataGridView1[1, i].Value, dataGridView1[2, i].Value, dataGridView1[3, i].Value,
dataGridView1[4, i].Value, dataGridView1[5, i].Value,dataGridView1[6, i].Value,dataGridView1[7, i].Value,dataGridView1[8, i].Value);
dataGridView1.Rows.RemoveAt(i);
}
}
|
|
|
|
|
Date :
2015-09-18 09:49:45 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผม copy code ของคุณ phuriwat กับคุณ TOR_CHEMISTRY มาผสมกัน
แล้วพิมพ์ใน Notepad น่ะครับ
ผิดถูกขออภ้ย
Code (C#)
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView2.Rows.Add();
dataGridView2.Rows[n].Cells[0].Value = false;
dataGridView2.Rows[n].Cells[1].Value = item.Cells[1].Value.ToString();
dataGridView2.Rows[n].Cells[2].Value = item.Cells[2].Value.ToString();
dataGridView2.Rows[n].Cells[3].Value = item.Cells[3].Value.ToString();
dataGridView2.Rows[n].Cells[4].Value = item.Cells[4].Value.ToString();
dataGridView2.Rows[n].Cells[5].Value = item.Cells[5].Value.ToString();
dataGridView2.Rows[n].Cells[6].Value = item.Cells[6].Value.ToString();
dataGridView2.Rows[n].Cells[7].Value = item.Cells[7].Value.ToString();
dataGridView2.Rows[n].Cells[8].Value = item.Cells[8].Value.ToString();
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView2.Rows.Add(false, dataGridView1[1, i].Value, dataGridView1[2, i].Value, dataGridView1[3, i].Value,
dataGridView1[4, i].Value, dataGridView1[5, i].Value,dataGridView1[6, i].Value,dataGridView1[7, i].Value,dataGridView1[8, i].Value);
}
}
for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView1.Rows.RemoveAt(i);
}
}
|
ประวัติการแก้ไข 2015-09-18 10:34:35
|
|
|
|
Date :
2015-09-18 10:01:31 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 11 เขียนโดย : phuriwat เมื่อวันที่ 2015-09-18 09:49:45
รายละเอียดของการตอบ ::
ผิดครับ
ใช้แค่
Code (C#)
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView2.Rows.Add(false, dataGridView1[1, i].Value, dataGridView1[2, i].Value, dataGridView1[3, i].Value,
dataGridView1[4, i].Value, dataGridView1[5, i].Value,dataGridView1[6, i].Value,dataGridView1[7, i].Value,dataGridView1[8, i].Value);
dataGridView1.Rows.RemoveAt(i);
}
}
หรือไม่ก็
Code (C#)
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView2.Rows.Add();
dataGridView2.Rows[n].Cells[0].Value = false;
dataGridView2.Rows[n].Cells[1].Value = dataGridView1[1, i].Value.ToString();
dataGridView2.Rows[n].Cells[2].Value = dataGridView1[2, i].Value.ToString();
dataGridView2.Rows[n].Cells[3].Value =dataGridView1[3, i].Value.ToString();
dataGridView2.Rows[n].Cells[4].Value = dataGridView1[4, i].Value.ToString();
dataGridView2.Rows[n].Cells[5].Value = dataGridView1[5, i].Value.ToString();
dataGridView2.Rows[n].Cells[6].Value =dataGridView1[6, i].Value.ToString();
dataGridView2.Rows[n].Cells[7].Value = dataGridView1[7, i].Value.ToString();
dataGridView2.Rows[n].Cells[8].Value =dataGridView1[8, i].Value.ToString();
dataGridView1.Rows.RemoveAt(i);
}
}
เลือกเอาซักอย่างครับ
แต่ผมถนัดแบบแรกเพราะมันไม่ต้องเขียนโค้ดหลายบรรทัดครับ
|
|
|
|
|
Date :
2015-09-18 10:01:35 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ได้เลย ครับ มันก๊อป ได้แถวเดียว อีกแถวไม่ก๊อปครับ
|
|
|
|
|
Date :
2015-09-18 10:28:03 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
นี่โค๊ดครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=ADMIN;Initial Catalog=BTEC_MANAGEMENT;User ID=Programmer;Password=1234");
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select private_code, product_code, serial,name, unit_name, description, remark, add_date FROM products", conn);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = false;
dataGridView1.Rows[n].Cells[1].Value = item["private_code"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["product_code"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["serial"].ToString();
dataGridView1.Rows[n].Cells[4].Value = item["name"].ToString();
dataGridView1.Rows[n].Cells[5].Value = item["unit_name"].ToString();
dataGridView1.Rows[n].Cells[6].Value = item["description"].ToString();
dataGridView1.Rows[n].Cells[7].Value = item["remark"].ToString();
dataGridView1.Rows[n].Cells[8].Value = item["add_date"].ToString();
}
conn.Close();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if ((bool)dataGridView1[0, i].Value == true)
{
dataGridView2.Rows.Add(false, dataGridView1[1, i].Value, dataGridView1[2, i].Value, dataGridView1[3, i].Value,
dataGridView1[4, i].Value, dataGridView1[5, i].Value, dataGridView1[6, i].Value, dataGridView1[7, i].Value, dataGridView1[8, i].Value);
dataGridView1.Rows.RemoveAt(i);
}
}
}
}
}
|
|
|
|
|
Date :
2015-09-18 10:30:22 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รอบในการ Add กับ Remove ต้องแยกกันน่ะครับ
สมมุติมันมี 2 row
รอบที่ 1 เราเพิ่มได้ แต่เราลบแถวที่ 1 ออก
เวลาที่ i=2
มันจะหาแถวที่ 2 ไม่เจอน่ะครับ
เพราะมันเหลือแถวเดียวแล้ว
|
|
|
|
|
Date :
2015-09-18 10:33:57 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วจะต้องโค๊ดอย่างไรครับ ผมงงครับ ช่วยหน่อยครับ Y^Y
|
|
|
|
|
Date :
2015-09-18 10:44:41 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผม ได้ แล้วครับ ขอบคุณทั้งสองคนมากครับ ขอบคุณครับ
|
|
|
|
|
Date :
2015-09-18 10:51:00 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้โค๊ดที่ได้นะครับ
Code (C#)
private void button1_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if ((bool)item.Cells[0].Value == true)
{
int n = dataGridView2.Rows.Add();
dataGridView2.Rows[n].Cells[0].Value = false;
dataGridView2.Rows[n].Cells[1].Value = item.Cells[1].Value.ToString();
dataGridView2.Rows[n].Cells[2].Value = item.Cells[2].Value.ToString();
dataGridView2.Rows[n].Cells[3].Value = item.Cells[3].Value.ToString();
dataGridView2.Rows[n].Cells[4].Value = item.Cells[4].Value.ToString();
dataGridView2.Rows[n].Cells[5].Value = item.Cells[5].Value.ToString();
dataGridView2.Rows[n].Cells[6].Value = item.Cells[6].Value.ToString();
dataGridView2.Rows[n].Cells[7].Value = item.Cells[7].Value.ToString();
dataGridView2.Rows[n].Cells[8].Value = item.Cells[8].Value.ToString();
}
}
List<DataGridViewRow> toDelete = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
bool s = Convert.ToBoolean(row.Cells[0].Value);
if (s == true)
{
toDelete.Add(row);
}
}
foreach (DataGridViewRow row in toDelete)
{
dataGridView1.Rows.Remove(row);
}
}
|
|
|
|
|
Date :
2015-09-18 10:51:37 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แหล่มครับ
เอาใจช่วย ๆๆๆ
|
|
|
|
|
Date :
2015-09-18 11:03:27 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อิอิ แหล่มเลยครับ ว่างๆ เลยแวะมาดู ความจริงทำสั่นๆแบบนี้ก็ได้ผลลัพธ์เท่ากันคัรบ
Code (C#)
private void button1_Click(object sender, EventArgs e)
{
List<DataGridViewRow> toDelete = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells[0].Value))
toDelete.Add(row);
}
foreach (DataGridViewRow row in toDelete)
{
dataGridView1.Rows.Remove(row);
}
}
ปัญหาที่คุณลบแล้วมันติด คือ เราสั่งให้ลบแถวแบบทันทีออกไปจากกริดเลยไม่ได้ครับ เพราะว่าลำดับการลบมันจะเสียไปทันทีครับ เช่น
1
2
3
4
5
เราลบแถวที่ 1 ออกไป แทนที่มันจะมองแถวที่ 2 เป็นแถวที่ 2 ตามปกติ มันกับจัดลำดับให้ใหม่ เป็น
2=1 ,3=2 แทน ลำดับมันเลยเสียครับ
|
|
|
|
|
Date :
2015-09-18 11:40:31 |
By :
Freedom |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทุกคนมากครับ ^^
|
|
|
|
|
Date :
2015-09-18 11:52:45 |
By :
phuriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|