نوشته شده توسط
aria2006
سلام من هم تقریبا همین مشکل دوستمون text@123 رو دارم
من یه دیتاگرید ویو دارم که 4 تا ستون داره و ستون چهارمش یه چک باکسه... حالا من میخوام در هر ردیفی که تیک خورده حذف کنم... با کد وقتی یه ردیفو انتخاب میکنم عمل حذف انجام میشه ولی وقتی بیش از یک چک باکس تیک میخورن موقع حذف خطا میگیره... اینم بگم من ستونهای دیتاگریدمو از پروپرتی دیتاگرید(ویزارد) تعریف کردم و delcell نام ستونیه که چک باکسه. دوستان لطفا راهنمایی بفرمایند چگونه میتونم هر تعداد ردیفی که چک باکس اونا فعال بود رو حذف کنم ؟؟
private void delete_btn_Click(object sender, EventArgs e)
{
int t = dataGridView1.RowCount;
for (int i =0; i < t; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["delcell"].Value) ==true)
{
SqlCommand cmd = new SqlCommand("delete from A_archive where persenel_no=@code and radif=@rad", myconstr.con);
cmd.Parameters.AddWithValue("@code", code_p.Text);
cmd.Parameters.AddWithValue("@rad",dataGridView1.R ows[i].Cells["radif"].Value);
myconstr.con.Open();
cmd.ExecuteNonQuery();
myconstr.con.Close();
MessageBox.Show("حذف شد");
}
}
}
سلام
شما بجای حلقه for از foreach استفاده کنید مشکلتون حل میشه.(با اجازتون من کدهاتون رو کمی ویراش کردم.)
این تابع رو به کدهای کلاس فرمتون اضافه کند.(این تابغ تعداد سطرهای تیک خورده رو برمیگردونه) البته اختیاریه.
int GetCheckedCount(DataGridView gridView, int columnIndex)
{
return (gridView.Rows.Cast<DataGridViewRow>()
.Where(rows => Convert.ToBoolean(rows.Cells[columnIndex].Value) == true)).Count();
}
این هم کدها ویرایش شده:
private void delete_btn_Click(object sender, EventArgs e)
{
int i = 0;
SqlConnection myConnection = new SqlConnection("کانکشن استرینگ");
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells[نام یا ایندکس ستون دارای چک باکس].Value))
{
string pCode = code_p.Text;//اینجا باید کد پرسنلی دوباره بازخوانی شود
try
{
SqlCommand cmd = myConnection.CreateCommand();
cmd.CommandType=CommandType.Text;
cmd.CommandText = "DELETE FROM A_archive WHERE persenel_no = @code and radif = @rad";
cmd.Parameters.AddWithValue("@code", pCode);
cmd.Parameters.AddWithValue("@rad", row.Cells["radif"].Value);
if(myConnection.State == ConnectionState.Closed)
myConnection.Open();
cmd.ExecuteNonQuery();
i++;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
myConnection.Close();
}
}
}
int checkedrowscount = GetCheckedCount(dataGridView1,ایندکس ستون دارای چک باکس);
MessageBox.Show("تعداد " + i.ToString() + " سطر از " + checkedrowscount.ToString() + " سطر انتخا شده حذف شد");
}
هر جایی مشکل داشت بگید تا بررسی کنم.
موفق باشید.