PDA

View Full Version : Check و UnCheck کردن ستون های CheckBox در دیتاگرید



CYCLOPS
دوشنبه 14 تیر 1389, 07:24 صبح
سلام به همه دوستان
یه کد خوب و بهینه برای Check و UnCheck کردن ستون های CheckBox در دیتاگرید میخوام .
مشکل اینه که راهی که خودم استفاده میکنم و تمام کدهایی که تو اینترنت دیدم از حلقه استفاده میکنه واسه همین مثلا رو یه گرید با 2000 رکورد چک کردن ستون مدت نسبتا زیادی زمان میبره .
من تلاش هایی با تنظیم مقدار null در DefaultCellStyle انجام دادم ولی تو یه شرایطی خطاهای منطقی پیش میاره .

ممنون میشم راهنماییم کنید .

CYCLOPS
دوشنبه 14 تیر 1389, 10:16 صبح
دوستان الان مجددا تست کردم زمانی که دیتا گرید رو به یه List بایند کردم خیلی سریع تو حلقه همه رو چک میزنه در واقع اصلا زمانش محسوس نیست اما زمانی که به Database باید میکنم خیلی کند میشه . . . :ناراحت:
این دلیل خاصی داره ؟؟؟؟

NIK
دوشنبه 14 تیر 1389, 11:50 صبح
دوستان الان مجددا تست کردم زمانی که دیتا گرید رو به یه List بایند کردم خیلی سریع تو حلقه همه رو چک میزنه در واقع اصلا زمانش محسوس نیست اما زمانی که به Database باید میکنم خیلی کند میشه . . . :ناراحت:
این دلیل خاصی داره ؟؟؟؟

آیا میخواید همه رو True کنید؟ اگه شرط دارید، آیا شرط همیشه ثابته؟
میخوام ببینم میشه با یه SqlCommand مشکل رو حل کرد؟

CYCLOPS
دوشنبه 14 تیر 1389, 13:50 عصر
من تو بانکم اصلا چنین فیلدی ندارم
تو گرید یه فیلد دستی ساختم به اسم checkRows که بعدا با یه متد id متناظر سطر check شده رو در میارم و مثلا حذف و ویرایش و . . . را برای اون سری از رکورد های انتخاب شده انجام میدم
مشکل اینه که با 1500 رکورد سرعت افتضاح پایینه.
نکته جالب اینکه زمانی که به بانک با استفاده از ویزارد کانکت میشم این مشکل سرعت بر طرف میشه ولی من چرا زمان اجرای حلقه در دو حالت فرق میکنه ؟؟ (منطقی نیست به ویزارد و . . . ربط داشته باشه ولی داره :ناراحت: )

NIK
دوشنبه 14 تیر 1389, 13:58 عصر
من تو بانکم اصلا چنین فیلدی ندارم
تو گرید یه فیلد دستی ساختم به اسم checkRows که بعدا با یه متد id متناظر سطر check شده رو در میارم و مثلا حذف و ویرایش و . . . را برای اون سری از رکورد های انتخاب شده انجام میدم
مشکل اینه که با 1500 رکورد سرعت افتضاح پایینه.
نکته جالب اینکه زمانی که به بانک با استفاده از ویزارد کانکت میشم این مشکل سرعت بر طرف میشه ولی من چرا زمان اجرای حلقه در دو حالت فرق میکنه ؟؟ (منطقی نیست به ویزارد و . . . ربط داشته باشه ولی داره :ناراحت: )

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

اگه منظورتون رو درست متوجه شده باشم، این روش سرعت رو بالا میبره.

CYCLOPS
دوشنبه 14 تیر 1389, 14:03 عصر
دوست عزیز مشکل زمانی هست که قرار است Check All و Un Check All (انتخاب تمام رکوردها و عدم انتخاب تمام رکوردها) انجام بشه . . .
در حد 100 رکورد و این حدودا هم اختلاف زمانی محسوس نیست .
فکر نکنم دابل کلیک کردن و چک زدن checkBox تفاوت خاصی داشته باشه موضوع همون انتخاب تمام سطر ها هست

(فکر کنم مشکل به سوال این تاپیک (http://barnamenevis.org/forum/showthread.php?t=232106) مروبط باشه دوستانی که اطلاع دارند لطفا به این تاپیک (http://barnamenevis.org/forum/showthread.php?t=232106)جواب بدن)

CYCLOPS
سه شنبه 15 تیر 1389, 09:43 صبح
دوستان مشکل بسیار اتمی بود :لبخند:
البته حل شد
فکر کنم این یه باگ تو ویژوال استادیو باشه توضیحات کامل رو تو این تاپیک (http://barnamenevis.org/forum/showthread.php?t=232106) بخونید .