PDA

View Full Version : اجرای کد بعد از DataBinding



rezayeman
یک شنبه 17 آذر 1392, 07:58 صبح
با سلام خدمت دوستان
من یک تابع دارم که باید درست بعد از اینکه داده ها در دیتاگرید لود شدن اجرا بشه. من این تابع را در رویداد DataBindingComplete دیتاگرید فراخوانی کردم اما متاسفانه وقتی از برنامه تست میگیرم میبینم که این تابع در هر اجرا 3 بار فراخوانی میشه. آیا رویداد دیگه ای هست که فقط 1 بار فراخوانی بشه؟

البته اینو هم بگم که من تو این تابع فقط اسم ستونهارو فارسی میکنم و یه سری از ستونها visible اونارو false میکنم و یه foreach هم گذاشتم که سطرهارو شماره گذاری میکنه. آیا راه حل بهتری برای اینکار سراغ دارید؟ یا اینکه رویدادی هست که بعد از پر شدن دیتاگرید اجرا بشه و فقط یه بار فراخوانی بشه؟

اگه واسه visible کردن پیشنهاد میکنید که از دستور sql استفاده کنم بگم که توی storedprocedure اینکارو کردم و به همه ستونها احتیاج دارم چون مقدارشونو به فرمهای دیگه پاس میدم.

با تشکر

danialafshari
چهارشنبه 20 آذر 1392, 14:00 عصر
سلام
اگر درست متوجه شده باشم:
شما یک تابع درست کنید و در دکمه ثبت،آپدیت،حذف اون تابع رو فراخوانی کنید
و DataBinding هم فقط درون فرم لود بزارید که یک بار فراخوانی بشه
موفق باشید

rezayeman
سه شنبه 03 دی 1392, 10:29 صبح
مشکل دقیقا همینجاست. من در ابتدا کاری که شما فرمودین انجام دادم اما چون اطلاعات زیاده تا بخواد همه اطلاعات لود بشه بقیه کدها اجرا میشن و تابع کارای مد نظر منو نمایش نمیده. به عنوان مثال همون foreach که تو پست اول خدمتون عرض کردم تا موقعی که کل داده ها لود نشن چیزیو نشون نمیده و عملا بی فایده میشه. واسه همین اومدم از رویداد DataBindingComplete استفاده کردم که دیدم در هر اجرا 3 بار فراخوانی میشه.

private void FormatDatagvMain()
{

lblCount.Text = (DatagvMain.Rows.Count).ToString();

DatagvMain.Columns["InnerId"].HeaderText = "شماره داخلی";
DatagvMain.Columns["IdRecord"].HeaderText = "شماره ثبت";
DatagvMain.Columns["InnerDate"].HeaderText = "تارخ ثبت سیستم";
DatagvMain.Columns["RecordDate"].HeaderText = "تاریخ ثبت دبیرخانه";
DatagvMain.Columns["Type"].HeaderText = "نوع نامه";
DatagvMain.Columns["Subject"].HeaderText = "موضوع";
DatagvMain.Columns["Sender"].HeaderText = "فرستنده";
DatagvMain.Columns["Reciever"].HeaderText = "گیرنده";
DatagvMain.Columns["LetterNum"].HeaderText = "شماره نامه";
DatagvMain.Columns["Tabagheh"].HeaderText = "طبقه بندی";



foreach (DataGridViewRow Row in DatagvMain.Rows)
{
DatagvMain.Rows[Row.Index].HeaderCell.Value = (Row.Index + 1).ToString();
}
}


اینم کدی که در DataBindingComplete فراخوانی میشه