اوبالیت به بو
پنج شنبه 20 بهمن 1390, 13:42 عصر
درود
در فرم شماره 1 یک گرید از رکوردهای جدول بانک اطلاعاتی پر شده است. در رویداد CellDoubleClick کدی نوشته ام که فرم شماره 2 رو نمایش می دهد و در این فرم شماره 2 باید اطلاعات رکورد کلیک شده نمایش داده شود (جهت ویرایش). اتفاقی که می افتد این است که اطلاعات به صورت کامل نمایش داده نمی شود.
کدهای فرم 1:
private void dgrwOrders_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
try
{
UIL.Classes.StaticVariables._OrderID = Convert.ToInt32(dgrwOrders.Rows[e.RowIndex].Cells["ID"].Value.ToString());
UIL.Classes.StaticVariables._EditMode = 2;
Form frmActionsOrder = new UIL.Order.ActionsOrder();
frmActionsOrder.Show();
}
catch (Exception)
{ }
}
کلاس StaticeVariables پراپرتی را به نام _OrderID دارد که مقدار منحصر به فرد _کلید) جدول را نگه داری می کند. خط اول این مقدار را از گرید داخل این پراپرتی می ریزد. خط دوم مشخص می کند که قرار است در لحظات بعدی فرم شماره 2 در حالت ویرایش باز شود (EditMode = 2). خط شماره 3 یک شی از فرم شماره 2 می سازد و در خط چهار فرم 2 را نمایش می دهد.
در رویداد Load فرم شماره 2 بنده یک Select بوسیله مقدار کلید - که در کلاس StaticeVariables - ذخیره کرده ام را اجرا می کنم. رکورد مورد نظر واکشی می شود و بنده عناصر فرم شماره 2 را به این صورت می خواهم از اطلاعات واکشی شده پر کنم:
DataSet dsOrderInfo = new DataSet();
dsOrderInfo = DAL.Classes.Orders.SelectByID(OrderID);
if (dsOrderInfo.Tables[0].Rows.Count > 0)
{
//نمایش اطلاعات عمومی سفارش
DataRow drOrderInfo = dsOrderInfo.Tables[0].Rows[0];
txtPatientID.Text = drOrderInfo["PatientID"].ToString();
txtPatientID.ReadOnly = true;
lblFullyName.Text = GetPatientName(Convert.ToInt32(txtPatientID.Text)) ;
lblOperator.Text = "ثبت کننده در سیستم: " + drOrderInfo["UserRegisteredName"].ToString();
lblDateTime.Text = "تاریخ ثبت: " + UIL.Classes.PersianDate.ToShamsi(DateTime.Parse(dr OrderInfo["Date"].ToString()));
پس از Trace متوجه شدم دستورات پس از اجرا خط مربوط به if متوقف می شوند و خط فرمان اجرای برنامه به فرم شماره 1 بازگشته و دستور frmActionsOrder.Show(); را اجرا می کند!!!
هنوز متوجه نمی شوم که چرا این اتفاق می افته. اگر خط frmActionsOrder.Show(); در فرم شماره 1 اجرا شده پس یعنی متد مربوطه تمام شده و حالا نوبت به فرم شماره 2 هست. اما نمی دانم چرا وسط اجرای متدی در فرم شماره 2 خط اجرای برنامه دوباره فرم 1 بازگشته دستوری رو که اشاره کردم اجرا می کند.
مشکل از کجاست؟ ممنون می شم اگر بنده رو راهنمایی فرمایید.
در فرم شماره 1 یک گرید از رکوردهای جدول بانک اطلاعاتی پر شده است. در رویداد CellDoubleClick کدی نوشته ام که فرم شماره 2 رو نمایش می دهد و در این فرم شماره 2 باید اطلاعات رکورد کلیک شده نمایش داده شود (جهت ویرایش). اتفاقی که می افتد این است که اطلاعات به صورت کامل نمایش داده نمی شود.
کدهای فرم 1:
private void dgrwOrders_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
try
{
UIL.Classes.StaticVariables._OrderID = Convert.ToInt32(dgrwOrders.Rows[e.RowIndex].Cells["ID"].Value.ToString());
UIL.Classes.StaticVariables._EditMode = 2;
Form frmActionsOrder = new UIL.Order.ActionsOrder();
frmActionsOrder.Show();
}
catch (Exception)
{ }
}
کلاس StaticeVariables پراپرتی را به نام _OrderID دارد که مقدار منحصر به فرد _کلید) جدول را نگه داری می کند. خط اول این مقدار را از گرید داخل این پراپرتی می ریزد. خط دوم مشخص می کند که قرار است در لحظات بعدی فرم شماره 2 در حالت ویرایش باز شود (EditMode = 2). خط شماره 3 یک شی از فرم شماره 2 می سازد و در خط چهار فرم 2 را نمایش می دهد.
در رویداد Load فرم شماره 2 بنده یک Select بوسیله مقدار کلید - که در کلاس StaticeVariables - ذخیره کرده ام را اجرا می کنم. رکورد مورد نظر واکشی می شود و بنده عناصر فرم شماره 2 را به این صورت می خواهم از اطلاعات واکشی شده پر کنم:
DataSet dsOrderInfo = new DataSet();
dsOrderInfo = DAL.Classes.Orders.SelectByID(OrderID);
if (dsOrderInfo.Tables[0].Rows.Count > 0)
{
//نمایش اطلاعات عمومی سفارش
DataRow drOrderInfo = dsOrderInfo.Tables[0].Rows[0];
txtPatientID.Text = drOrderInfo["PatientID"].ToString();
txtPatientID.ReadOnly = true;
lblFullyName.Text = GetPatientName(Convert.ToInt32(txtPatientID.Text)) ;
lblOperator.Text = "ثبت کننده در سیستم: " + drOrderInfo["UserRegisteredName"].ToString();
lblDateTime.Text = "تاریخ ثبت: " + UIL.Classes.PersianDate.ToShamsi(DateTime.Parse(dr OrderInfo["Date"].ToString()));
پس از Trace متوجه شدم دستورات پس از اجرا خط مربوط به if متوقف می شوند و خط فرمان اجرای برنامه به فرم شماره 1 بازگشته و دستور frmActionsOrder.Show(); را اجرا می کند!!!
هنوز متوجه نمی شوم که چرا این اتفاق می افته. اگر خط frmActionsOrder.Show(); در فرم شماره 1 اجرا شده پس یعنی متد مربوطه تمام شده و حالا نوبت به فرم شماره 2 هست. اما نمی دانم چرا وسط اجرای متدی در فرم شماره 2 خط اجرای برنامه دوباره فرم 1 بازگشته دستوری رو که اشاره کردم اجرا می کند.
مشکل از کجاست؟ ممنون می شم اگر بنده رو راهنمایی فرمایید.