PDA

View Full Version : حذف 2 ردیف پشت سر هم باعث رخ دادن Exception میشه.



resident
جمعه 05 بهمن 1386, 18:29 عصر
سلام.
من یه دیتاگریدویو دارم .اگه کاربر بخواد یک رکورد رو حذف کنه ، بعد از انتخاب رکورد موردنظر دکمه حذف رو بزنه رکورد حذف میشه.
حالا مشکل اینجاست که اگه بخوام 2 ردیف پشت سر هم رو حذف کنم استثنا
(deleted row information can not accessed through the row) رخ میده. اما برای ردیف هایی که پشت سرهم نیستند مشکلی نداره ،حذف می کنه.
مشکل کار کجاست؟


private void delete_Click(object sender, EventArgs e)
{
if (MessageBox.Show("آیا برای حذف این طرح مطمئن هستید؟","حذف طرح",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning ,MessageBoxDefaultButton.Button1,MessageBoxOptions .RtlReading)==DialogResult.OK);
{
int rowindex = dgv1.CurrentCell.RowIndex;
DataRow dr = dt.Rows[rowindex];
string pk = (string)dr["code_pishnahade_tarh"];
cmd.CommandText = string.Format("delete from pishnahade_tarh where code_pishnahade_tarh='{0}'", pk);
cmd.Connection = cn;
cn.Open();
int numdeleted = cmd.ExecuteNonQuery();
cn.Close();
if (numdeleted != 0)
{
dgv1.Rows.RemoveAt(rowindex);
MessageBox.Show("طرح مورد نظر حذف شد");
}
}
}

dr_csharp
شنبه 06 بهمن 1386, 08:22 صبح
فکر میکنم شما تو برنامتون دارین سعی میکنید به row حذف شده دسترسی پیدا کنید که منجر به خطا میشه !
پیشنهاد میکنم در قسمت پایانی عمیات حذف ، برای selectedIndex گریدنون مقدار 1- رو در نظر بگیرید !

SabaSabouhi
شنبه 06 بهمن 1386, 09:52 صبح
با سلام
من هم مثل دوستمون dr_csharp گمان مى‌کنم که مشکل همون سطر حذف شده باشه.
و باز گمان مى‌کنم که از DataTable به عنوان DataSource استفاده کرده باشى.
اگه این‌طور هست، بجاى DataTable از یک View استفاده کن مشکل حل مى‌شه.



DataView MyView = new DataView( MyTable, "", "", DataViewRowState.CurrentRows);


یا



DataView MyView = MyTable.DefaultView;
MyView.RowState = DataViewRowState.CurrentRows;


صبا صبوحى