PDA

View Full Version : delet کردن از دو جدول ترکیبی



mary3541
شنبه 23 خرداد 1388, 16:19 عصر
توی برنامم یه dgv دارم که درون آن اطلاعات دو جدول را نشان میدهد
جداول عبارتند از CurseTerm که دارای فیلدهای CourseTerm_ID و Course_ID_FK و Term_ID_FKو از جدول دوم که Course هست فیلد TitleEn در یلر نمایش داده میشوند.
حال میخواهم عمل Delete روی یک ردیف خاص انجام بدم
بر روی دکمه delete در قسمت کد، کد زیر رو نوشتم


{
ds = objcorter.connect();
this.dgv.DataSource = ds.Tables["CourseTerm"];
DataRowView drv = (DataRowView)this.BindingContext[ds.Tables["CourseTerm"]].Current;
DialogResult dr = MessageBox.Show("™آیا مطمئن هستید؟", "",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (dr == DialogResult.Yes)
{
objcorter.deletCourseTerm(drv);
}
}

کد DeletCourseTerm در لایه business عبارت است از


publicvoid deletCourseTerm(DataRowView drv)
{
objcorter.deletCourseTerm(drv);
}

و کد DeleteCourseTerm در قسمت DataLayer عبارت است از


publicvoid deletCourseTerm(DataRowView drv)
{
int rowid = (int)drv.Row["CourseTerm_ID"];
drv.Delete();
SqlCommand cmd = newSqlCommand("delete from CourseTerm where CourseTerm_ID=@CourseTerm_ID", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@CourseTerm_ID",CourseTerm_ID );
con.Open();
cmd.ExecuteNonQuery();
con.Close();

}

در لایه business هم کد connect


public DataSet connect()
{
DataSet ds = new DataSet();
ds = objcorter.connect();
return ds;
}


و کد connect در لایه data


public DataSet connect()
{
con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\AcademySystem.mdf;integrated security=true; user instance=true");
SqlDataAdapter sda = new SqlDataAdapter("select CourseTerm.CourseTerm_ID, CourseTerm.Term_ID_Fk,CourseTerm.Session, Course.TitleEn ,CourseTerm.Course_ID_FK from CourseTerm inner join Course ON Course.Course_ID = CourseTerm.Course_ID_FK", con);
sda.SelectCommand.CommandType = CommandType.Text;
DataSet ds = new DataSet();
sda.Fill(ds, "CourseTerm");
return ds;
}

ولی هنگام حذف هر کدام از ردیفها رو انتخاب میکنم و دکمه delete رو میزنم فقط ردیف اول حذف میشه
میشه کمکم کنید
فوریه

mary3541
شنبه 23 خرداد 1388, 18:12 عصر
کسی نمیتونه کمک کنه؟

NewFoxStudent
شنبه 23 خرداد 1388, 18:34 عصر
این چیزی که میگم فقط احتمال و مطمئن نیستم که درست باشه اما امتحانش ضرر نداره


{
ds = objcorter.connect();
this.dgv.DataSource = ds.Tables["CourseTerm"];
DataRowView drv = (DataRowView)this.BindingContext[ds.Tables["CourseTerm"]].Current;
DialogResult dr = MessageBox.Show("™آیا مطمئن هستید؟", "",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (dr == DialogResult.Yes)
{
objcorter.deletCourseTerm(drv);
}
}

اون قسمت از کد رو که با رنگ قرمز مشخص کردم حذف کن احتمالا درست بشه
چون شما موقع کلیک دکمه حذف دارید دوباره دیتاسورس مربوط به گرید رو مقدار دهی میکنید و این باعث میشه اولین سطر جدول انتخاب بشه

mary3541
شنبه 23 خرداد 1388, 19:18 عصر
این چیزی که میگم فقط احتمال و مطمئن نیستم که درست باشه اما امتحانش ضرر نداره


{
ds = objcorter.connect();
this.dgv.DataSource = ds.Tables["CourseTerm"];
DataRowView drv = (DataRowView)this.BindingContext[ds.Tables["CourseTerm"]].Current;
DialogResult dr = MessageBox.Show("™آیا مطمئن هستید؟", "",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (dr == DialogResult.Yes)
{
objcorter.deletCourseTerm(drv);
}
}

اون قسمت از کد رو که با رنگ قرمز مشخص کردم حذف کن احتمالا درست بشه
چون شما موقع کلیک دکمه حذف دارید دوباره دیتاسورس مربوط به گرید رو مقدار دهی میکنید و این باعث میشه اولین سطر جدول انتخاب بشه

این کار رو کردم دیگه اصلا عمل حذف رو انجام نمیده

NewFoxStudent
شنبه 23 خرداد 1388, 19:20 عصر
مگه شما قبل از کلیک دکمه حذف DataSource گرید رو مقدار دهی نمیکنید

mary3541
شنبه 23 خرداد 1388, 20:03 عصر
مگه شما قبل از کلیک دکمه حذف DataSource گرید رو مقدار دهی نمیکنید


ds = objcorter.connect();
this.dgv.DataSource = ds


این دو خط مگه dgv رو مقداردهی نمیکنه؟

NewFoxStudent
شنبه 23 خرداد 1388, 20:11 عصر
بله مقدار دهی میکنه
منظورم اینه که این مقدار دهی فقط توی دکمه Delete انجام میشه یا مثلا تو رویداد Load فرم هم DataSource رو مقدار دهی میکنید

mary3541
شنبه 23 خرداد 1388, 20:19 عصر
بله مقدار دهی میکنه
منظورم اینه که این مقدار دهی فقط توی دکمه Delete انجام میشه یا مثلا تو رویداد Load فرم هم DataSource رو مقدار دهی میکنید
توی load هم مقدار دهی میکنم

NewFoxStudent
شنبه 23 خرداد 1388, 20:29 عصر
این خط رو قبل از ساختن نمونه DataRowView اضافه کنید تا موقعیت فعلی رو تغییر بده به ردیف انتخاب شده


this.dataGridView1.BindingContext[attendenceDataSet.Tables["CourseTerm"]].Position = dgv.CurrentRow.Index;


همین الان تست کردم ، تا وقتی موقعیت شی BindingContext رو عوض نکنید موقعیتش همون موقعیت اول میمونه

من زیاد با اشیا BindingContext کار نکردم ،بنابراین ممکنه راه خیلی ساده تری هم وجود داشته باشه
راهی که به ذهنم رسید همین بود

mary3541
شنبه 23 خرداد 1388, 20:48 عصر
این خط رو قبل از ساختن نمونه DataRowView اضافه کنید تا موقعیت فعلی رو تغییر بده به ردیف انتخاب شده


this.dataGridView1.BindingContext[attendenceDataSet.Tables["CourseTerm"]].Position = dgv.CurrentRow.Index;





Error 1 The name 'attendenceDataSet' does not exist in the current context

NewFoxStudent
شنبه 23 خرداد 1388, 20:50 عصر
دوست عزیز باید نام دیتاست خودتون رو بزارید جای اون



this.dataGridView1.BindingContext[ds.Tables["CourseTerm"]].Position = dgv.CurrentRow.Index;

mary3541
شنبه 23 خرداد 1388, 20:55 عصر
دوست عزیز باید نام دیتاست خودتون رو بزارید جای اون



this.dataGridView1.BindingContext[ds.Tables["CourseTerm"]].Position = dgv.CurrentRow.Index;

شرمنده فهمیدم حواسم نبود
همه این کار هارو کردم
الان موقعیتش درست شد ولی حذف رو انجام نمیده

NewFoxStudent
شنبه 23 خرداد 1388, 20:57 عصر
اون خطی رو که گفتم حذف کنید دوباره برگردوندید دیگه؟

mary3541
شنبه 23 خرداد 1388, 21:03 عصر
اون خطی رو که گفتم حذف کنید دوباره برگردوندید دیگه؟
واقعا از لطفتون ممنون درست شد

NewFoxStudent
شنبه 23 خرداد 1388, 21:07 عصر
این رو هم یه نگاه بندازید


CurrencyManager cm = (CurrencyManager)dataGridView1.BindingContext[ds.Tables["CourseTerm"].DefaultView];
cm.Position = dataGridView2.CurrentRow.Index;
DataRowView row = (DataRowView)cm.List[cm.Position];
MessageBox.Show(row[0].ToString());

Louai_M
شنبه 30 اردیبهشت 1391, 17:51 عصر
سلام
میشه کد نمایش دو جدول ترکیبی برام بذارید