PDA

View Full Version : Deleted row information cannot be accessed through the row



shima2006
جمعه 05 شهریور 1389, 23:09 عصر
سلام دوستان
کسی میدونه چرا برنامه من تو خطی که Bold شده Error میده؟
خطا اینه :
DeletedRowInaccessibleException Was Unhandeld



privatevoid gridEX1_DeletingRecords(object sender, CancelEventArgs e)
{
if (MessageBox.Show("آيا از حذف اطمينان داريد؟", "توجه", MessageBoxButtons.YesNo, MessageBoxIcon.Question
, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) == DialogResult.No)
{
e.Cancel = true;
return;
}
GridEXRow r = this.gridEX1.GetRow();
CurrentRow = (r.DataRow asDataRowView).Row;
e.Cancel = false;
}
privatevoid gridEX1_RecordsDeleted(object sender, EventArgs e)
{

CurrentRow.Delete();
switch (CurrentRow.Table.TableName)
{
case"Expenses":
this.expensesTableAdapter1.Update(CurrentRow);
break;
case"View_Systems":
if (this.view_SystemsTableAdapter1.DeleteQuery((strin g)CurrentRow["value"], (int)CurrentRow["IdOther"],(int)CurrentRow["Code"]) == 1)
{ }
break;
}
}

C Sharp
شنبه 06 شهریور 1389, 08:13 صبح
چون سطر CurrentRow قبلا پاک شده ، تو حالت عادی نمیتونین به فیلدهاش دسترسی داشته باشین

ولی با روش زیر میتونید :



CurrentRow["value", DataRowVersion.Original];

shima2006
شنبه 06 شهریور 1389, 09:15 صبح
چون سطر CurrentRow قبلا پاک شده ، تو حالت عادی نمیتونین به فیلدهاش دسترسی داشته باشین

ولی با روش زیر میتونید :



CurrentRow["value", DataRowVersion.Original];


ولی من نمی خوام به فیلدهاش دسترسی داشته باشم ، من فقط میخوام سطر مورد نظر رو Delete کنم...

shima2006
شنبه 06 شهریور 1389, 15:30 عصر
دوستان کسی معنیه این پیغام خطا رو نمی دونه؟؟؟

حجتی نیا
شنبه 06 شهریور 1389, 15:55 عصر
اول با currentrow.delete رکورد رو از گرید حذف و بعدش با تو اون دستور با currentrow["fieldName"] میخواین اون رو از دیتابیس حذف کنین، مگه میشه؟؟
دستور تو case اولی اجرا میشه؟؟

shima2006
شنبه 06 شهریور 1389, 20:06 عصر
اول با currentrow.delete رکورد رو از گرید حذف و بعدش با تو اون دستور با currentrow["fieldName"] میخواین اون رو از دیتابیس حذف کنین، مگه میشه؟؟
دستور تو case اولی اجرا میشه؟؟

بله دستور Case اول هیچ مشکلی نداره و درست اجرا میشه...

shima2006
شنبه 06 شهریور 1389, 20:18 عصر
البته فرقشون در این هست که Case اول روی یک Table اجرا میشه در حالی که Case دوم داره با یک View کار میکنه...

shima2006
دوشنبه 08 شهریور 1389, 16:27 عصر
مشکل این کد به این شکل حل شد :



privatevoid gridEX1_DeletingRecords(object sender, CancelEventArgs e)
{
try
{
if (MessageBox.Show(" ", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question
, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) == DialogResult.No)
{
e.Cancel = true;
return;
}
GridEXRow r = this.gridEX1.GetRow();
CurrentRow = (r.DataRow asDataRowView).Row;
switch (CurrentRow.Table.TableName)
{
case"Expenses":
CurrentRow.Delete();
this.expensesTableAdapter1.Update(CurrentRow);
break;
case"View_Systems":
this.view_SystemsTableAdapter1.DeleteQuery((int)Cu rrentRow["IdOther"]);
break;
}
e.Cancel = false;
}

کیس اول چون باید از جدول ، حذف کنه باید دستور CurrentRow.Delete رو داشته باشه ولی کیس دوم که برای روی یه ویو نوشته شده و قبلا Delet براش تعریف شده دیگه نیازی به این دستور نداره.