CheckBox ติ๊กเลือก หลายช่อง แต่เมื่อกดลบ ลบได้แค่ช่องเดียว ช่วยหน่อยนะ มีโค๊ดครับ
ช่วยดูโค๊ดให้หน่อยนะครับ เป็น WinAPP
เวลาติ๊กเลือก Chexkbox ข้อมูลใน DataGrid ที่จะลบ ....เมื่อติ๊ก 1ช่องจะลบได้ปกติ
แต่...เมื่อติ๊ก1ช่องขึ้นไป มันจะลบ ตัวที่เราติ๊ก ที่อยู่แถวล่างสุดใน DataGrid เพียงแถวเดียว อ่ะครับ
ผมต้องการให้มันลบตามที่ผมเลือกติ๊กนะครับ
ผมค้นหาดูจากหนังสือ จากเว็บนี้ จากกูเกิ้ล มา2-3วันแล้วก็ยังทำไม่ได้เลยครับ
ช่วยแนะนำ แก้ไขให้ผมหน่อยครับ มึนตึ๊บเลยครับ :(
ขอบคุณครับพี่ๆ
Code (C#)
private void btnDel_Click(object sender, EventArgs e)
{
string sql;
sql = sb.ToString();
for (int i = dgvList.Rows.Count-1; i >= 0; i--)
{
if (dgvList.Rows[i].Cells[0].Value != null)
{
String id=dgvList.Rows [i].Cells [1].Value .ToString ();
sql="DELETE FROM product where pro_id='"+id+"'";
dgvList.Rows.RemoveAt(i);
Com.Connection = Conn;
Com.CommandType = CommandType.Text;
Com.CommandText = sql;
Com.ExecuteNonQuery();
Com.Transaction = tr;
Com.Parameters.Clear();
try
{
Com.ExecuteNonQuery();
MessageBox.Show("ลบข้อมูล เรียบร้อยแล้ว", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("ลบข้อมูล ไม่ได้", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
ClearAllData();
ShowData();
FormatDgvCustomerList();
}
}
private void ShowData()
{
string sql = "SELECT product.pro_id,product.pro_name,brand.brand_name FROM product,brand WHERE (product.brand_name=brand.brand_id) ORDER BY pro_id";
OleDbDataReader dr;
DataTable dt;
Com = new OleDbCommand();
Com.CommandType = CommandType.Text;
Com.CommandText = sql;
Com.Connection = Conn;
dr = Com.ExecuteReader();
if (dr.HasRows)
{
dt = new DataTable();
dt.Load(dr);
dgvList.DataSource = dt;
}
else
{
dgvList.DataSource = null;
}
dr.Close();
}
private void FormatDgvCustomerList()
{
if (dgvList.RowCount > 0)
{
dgvList.Columns[1].HeaderText = "รหัส";
dgvList.Columns[2].HeaderText = "ชื่อ";
dgvList.Columns[3].HeaderText = "ยี่ห้อ";
dgvList.Columns[1].Width = 60;
dgvList.Columns[2].Width = 100;
dgvList.Columns[3].Width = 100;
}
Tag : .NET, C#, VS 2010 (.NET 4.x)
Date :
2012-02-25 18:24:20
By :
Smile
View :
1832
Reply :
20
ลืมบอกไปผมใช่โค๊ด Chexkbox ไว้ใน ฟอร์มโหลดนะครับ
Code (C#)
DataGridViewCheckBoxColumn CheckCol = new DataGridViewCheckBoxColumn();
dgvList.Columns.Insert(0, CheckCol);
dgvList.Columns[0].HeaderText = "เลือก";
dgvList.Columns[0].Width = 40;
Date :
2012-02-25 18:27:05
By :
Smile
เครื่องหมายใน ลูป for อ่ะ ครับ เงื่อนไข ผิด i ต้อง น้อยกว่าหรือ เท่ากับ 0
ปล. นายเริ่มที่แถวสุดท้าย แล้วมัน เงื่อนไขนาย วนจนมากกว่า 0 คือ วนรอบเดียวมันก็ มากกว่า 0 แล้วครับ มันก็เลย ออก ลูป จึงทำให้ลบได้ แต่ ตัว แถวสุดท้าย ^^
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
//ดูง่ายดีครับ
}
Date :
2012-02-25 19:14:45
By :
mr.new
ขอบคุณ mr.new มากครับ
ผมไม่ค่อยถนัดเรื่องคำนวนเท่าไหร่
เพิ่งหัด เขียนโค๊ดนะครับ ขอบคุณมากครับ ^^
Date :
2012-02-25 20:12:00
By :
Smile
แต่ยังไม่ได้ครับ มันจะลบเป็นแถว เลขคี่อ่ะครับเช่นมี 8 แถสมันจะลบแถว 1 3 5 7 อ่ะครับ
โดยขนาดไม่ติ๊กCheckbox แค่กดปุ่มลบมันก้จะลบเลยครับ
ช่วยหน่อยครับจะส่งงานวันจันทร์แล้วครับ ^^
Date :
2012-02-25 20:31:27
By :
Smile
Code (C#)
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue==true)
{
// ลบตัวที่ check
}
}
ปล.เงื่อนไข != null มันมีปัญหา ตอนเช็ค อีกทีครับใช้ไม่ได้
Date :
2012-02-25 21:47:54
By :
Akio<--- mr.new
มันก้ยังลบแถวบนสุดที่เลือกครับ 1 แถว ผมงงมาเลยครับ
Checkbox ผมใช้โค๊ดสร้างนะครับไม่ได้ใช้ตัวช่วยของdatagrid อ่ะคับ
Date :
2012-02-25 22:15:52
By :
Smile
งั้นต้องลองเช็ค ก่อนครับ ว่า มีค่าที่เราเลือกจริงไหม ใน เงื่อนไข if ลอง ใส่ messagebox.show("ค่า pk ที่เราจะ ลบ"); ค่าที่เราเลือกมาดูก่อนครับ ว่า มันออกมา จริงไหมตามเงื่อนไขหรือปล่าวอ่ะ
ผมก็ไม่เคยใช้ datasource เลยครับ จับ dataset มาใส่ datagridview ทีละ row เอาอ่ะครับ เลยไม่รู้ว่า มันเกี่ยวกับตัวนั้นหรือปล่าว
Date :
2012-02-25 23:55:16
By :
Akio
ผมก็งมมา2-3วันละครับ
แต่ลองพิมโค๊ดลบเช็คบ๊อกแบบไม่ติดต่อฐานข้อมูลนี้ไป ใช้ได้นะครับ
แต่...มันจะลบแต่ในดาต้ากริดนะครับ ส่วนในฐานข้อมูลมันไม่ลบให้
for (int i = dataGridView1.Rows.Count -1; i >= 0 ; i--)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
{
dataGridView1.Rows.RemoveAt(i);
}
}
ผมอยากให้มันลบในฐานข้อมูลด้วยจะต้อง เพิ่มโค๊ดลบยังไงอะครับ
แล้วก็ มันต้องมีโค๊ด ไว้เช็ค เชคบ๊อกหรือป่าวครับ
ขอบคุณครับ
Date :
2012-02-26 00:14:29
By :
Smile
ลองใส่ messsbox เช็คค่า id ยังครับ
ประวัติการแก้ไข 2012-02-26 08:05:27
Date :
2012-02-26 07:55:07
By :
Akio
เช็คยังไงอ่าครับ
Date :
2012-02-26 09:02:48
By :
Smile
Code (C#)
String id=dgvList.Rows [i].Cells [1].Value .ToString ();
sql="DELETE FROM product where pro_id='"+id+"'";
MessageBox.Show("ค่าเช็ค box ที่ลบ"+id); //<--- มันจะ show ค่าที่เราเลือกมา (ที่จะลบ) ว่ามี id อะไรบ้าง
Com.Connection = Conn;
Com.CommandType = CommandType.Text;
Com.CommandText = sql;
Com.ExecuteNonQuery();
Com.Transaction = tr;
Com.Parameters.Clear();
try
{
Com.ExecuteNonQuery();
MessageBox.Show("ลบข้อมูล เรียบร้อยแล้ว", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information);
dgvList.Rows.RemoveAt(i); // < อันนี้เอามาไว้ที่ หลังจาก มันลบจากฐานข้อมูลได้แล้วดีกว่าครับ
}
catch
{
MessageBox.Show("ลบข้อมูล ไม่ได้", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Date :
2012-02-26 09:10:36
By :
Akio
อ่อครับมันจะโชว์ค่าที่เลือกมา
คือผมเลือก pro_id ที่มีค่า 21 มันก็ขึ้นมานะครับ แล้วมันก้ลบได้
แต่พอติ๊กเกิน2ตัวขึ้นไป มันจะโชวเมสเสจว่าลบแถวแรกสุดของตาราง แล้วมันก็ลบแค่ตารางเดียวครับ ...
Date :
2012-02-26 09:20:11
By :
Smile
Code (C#)
for (int i = dataGridView1.Rows.Count -1; i >= 0 ; i--)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
{
dataGridView1.Rows.RemoveAt(i);
}
}
อธิบาย* สมมุติ มี ข้อมูล 5 แถว ลูป for ตัวนี้ มันจะอ่านค่าจาก แถวสุดท้าย (แถวที่ 5) ครับ ลูปแรกทำเสร็จ มันเหลืออีก 4 แถว มันเลยเข้าเงื่อนไข ที่มันต้องหลุด ออกจาก ลูปมันครับ เพราะ i = 4 ซึ่งมากกว่า 0
*เงื่อนไขครับ มัน ต้อง i <= 0 ลองเปลี่ยนดูนะครับ
Date :
2012-02-26 09:35:09
By :
Akio
โค๊ดด้านบนผมใช้ทดลองลบแบบไม่ใช้ฐานข้อมูลครับ มันสามารถลบได้
แต่โค๊ดที่ผมโพสด้านบนที่คุณ Aiko แก้ให้มันลบได้ทีละตัวผมไม่ทราบว่าโค๊ดผิดตรงไหนอ่าครับ งงทั้งคืนแล้ว T_T
Date :
2012-02-26 09:53:54
By :
Smile
Code (C#)
private void button1_Click(object sender, EventArgs e) // ปุ่มเรียกข้อมูลลง datagridview
{
dataGridView1.Rows.Clear();
string sql = "select * from u01_pay";
DataSet ds = new DataSet();
ds = new DBClass().NpgGet(sql,"u01_pay");
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells[1].Value=ds.Tables[0].Rows[i]["pay_id"].ToString().Trim();
dataGridView1.Rows[i].Cells[2].Value=ds.Tables[0].Rows[i]["pay_name"].ToString().Trim();
}
}
}
private void button2_Click(object sender, EventArgs e) // ปุ่มลบ
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
{
MessageBox.Show(dataGridView1.Rows[i].Cells[1].Value.ToString() + "," + dataGridView1.Rows[i].Cells[2].Value.ToString());
string sql = "delete from u01_pay where pay_id='" + dataGridView1.Rows[i].Cells[1].Value.ToString().Trim() + "'";
int x = new DBClass().NpgExecute(sql);
if (x > 0)
{//มันลบใน ฐานข้อมูลแล้ว
MessageBox.Show("ลบ ID =" + dataGridView1.Rows[i].Cells[1].Value.ToString()+ "เรียบร้อยแล้ว");
dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
}
}
}
}
อันนี้ ผม ลองทำ กับ Postgres นะครับ ได้ปกติ
ลอง ไล่สเต็ปดูครับ
สู้ๆ ครับ
Date :
2012-02-26 12:08:08
By :
Akio
อ่ะครับ
ลองดูแล้วครับเวลากดลบมันจะมีเมสเสจบอกขึ้นมาตามแถวที่เลือกแล้วครับ
แต่ผมลองไล่ให้มันไปลบในฐานข้อมูล ยังไม่ได้เลยครับ
ของคุณ Aiko ติดต่อฐานข้อมูลผ่าน คลาส DBClassใช่ป่าวครับ แล้วผมต้องทำยังไงดีครับ งงมือใหม่ด้วยครับ
Date :
2012-02-26 12:53:22
By :
Smile
ผมลองแล้วมันยังลบเปน็เลขคี่อยู่อ่ะครับ - -
ยังไงขอไฟล์ที่ท่าน ทดสอบทำมาให้ผมดูหน่อยได้ไหมครับ ^^
เพราะผมไม่แน่ใจว่ามนหอรมผมจะมีอะไรที่ทำให้มีปันหาไมหอ่ะครับ
Date :
2012-02-26 15:30:40
By :
Smile
ประมาณว่าติ๊กเลือกช่องไหนมันจะลบแถวที่เลือก แล้วมันจะข้ามแถวไป1แถวอะครับแล้วลบอีก
ดังรูปครับ
Date :
2012-02-26 15:42:30
By :
Smile
ได้ละครับ ขอบคุณท่าน Aiko มากนะครับ
ปล.แก้คำสั่งให้มันลบจากแถวล่างขึ้นบนอ่ะถึงได้ -_-"
Date :
2012-02-26 16:37:10
By :
Smile
Load balance : Server 00