کتابخانه Ces.WinForm.UI
نویسنده: هادی مزارعی
تاریخ: ۱۴۰۴/۰۳/۱۰ ۰۸:۵۶
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
SelectionChanged رو اجرا میکنه (بدون کلیک کاربر و قبل از تخصیص مقدار جدید).SelectionMode = FullRow باشه ردیف اول در حالت انتخاب قرار میگیره. در این موقع CurrentCell و یا CurrentRow دیگه null نیستند (که به نظرم خوب هم نیست)SelectionCanged از گرید Master گرید Detail رو مقدار دهی میکنه در واقع یک API صدا زده میشه و اطلاعات رو دریافت و سپس نمایش میده.ClearSelection اجرا میشه) و SelectionChange در گرید Master اجرا میشه و با توجه به اینکه متغیرهای CurrentCell و CurrentRow دارای مقدار هستند بنابراین یکبار دیگه (که اصلا نیاز نیست) گرید Detail مقداردهی میشه.CesDataSource ضمن آنکه رویداد OnSelectionChanged اجرا نمیشه بلکه گرید بدون انتخاب سلول و یا ردیف خواهد بود و مقادیر CurrentCell و CurrentRow برابر null هستند. حالا می توان در رویداد SelectionChanged از گرید Master بررسی کرد اگر مقادیر CurrentCell و CurrentRow برابر null بودند (که در نسخه داتنت دارای مقدار بودند)، مقدار ویژگی CesDataSource از گرید Detail رو برابر null قرار داد که در این حالت اگر قبلا گرید مقداردهی شده باشد، ستونها حفظ خواهند شد و ردیفها از بین می روند.true باشد بعد از تخصیص source به کنترل، مجددا آیتم قبلی بصورت خودکار انتخاب خواهد شد. فرض کنید یک لیست با ده آیتم داریم و آیتم پنجم در حالت انتخاب است. به هر دلیل اگر مجبور شدید اطلاعات لیست رو مجدد بارگذاری کنید، با فعال بودن این گزینه، آیتم پنجم بصورت خودکار انتخاب خواهد شد.CesKeepPreviousSelection در این است که انتخاب قبلی در این شرایط مهم نیست و فقط یک گزینه باید در CesComboBox در حالت انتخاب باشد ولی در CesKeepPreviousSelection اگر از قبل آیتمی انتخاب شده باشد، کنترل بعد از دریافت Source، آیتم قبلی را انتخاب خواهد کرد.اگر گزینهCesKeepPreviousSelection = trueباشد مقدارCesSeletFirst = falseخواهد بود و برعکس.
GoToValueMember و GoToDisplyMember پیشنهاد میگردد.CesComboBox مواردی عنوان شد ولی چند مساله وجود دارد که در نسخه 1.18.12 مرتفع شدهاند.CesDataSource به دلیل آنکه انتخاب قبلی null میشد، رویداد CesSelectionChanged فعال میشد.CesKeepPreviousItem و یا CesSelectFirst فعال میبود، پس از تخصیص مقدار به کنترل، متد GoToValueMember از توسط کنترل بصورت خودکار اجرا میشد تا انتخاب قبلی کاربر را مجددا فعال کند و این کار باعث میشد که برای بار دوم رویداد CesSelectionChanged فعال شود.CesComboBox فراخوانی شود میبایست دوبار این اتفاق رخ میداد و برای برنامه هایی که باید یک درخواست API در وب را ارسال کنند مساله جالبی نبود (غیر از آن هم جالب نیست).CesDataSource اگر ویژگیهای CesKeepPreviousItem و یا CesSelectFirst فعال باشند کنترل رویداد را فعال نخواهد کرد بلکه صدا زدن رویداد بعد از انتخاب آیتم قبلی کاربر و یا انتخاب اولین گزینه اتفاق خواهد افتاد. تا اینجا CesComboBox در کارکرد داخلی خودش اصلاح شده و در صورت لزوم رویداد را صدا میزند.CesComboBox یک توسعه دهنده حسب نیاز پروژه جداولی که دارای ویژگی IsPinned باشند (تقریبا تمام جداول دارند) باید به عنوان گزینهی دارای الویت، در حالت انتخاب قرار گیرد. بنابراین اقدام به انتخاب آیتمی خواهد کرد که IsPinned = true باشد. مرحله اول که دریافت و بارگذاری اطلاعات است رویداد CesSelectionChanged را اجرا خواهد کرد و آنچه که توسط توسعه دهنده میبایست حسب نیاز پروژه در حالت انتخاب باشد نیز رویداد CesSelectionChanged را مجدد اجرا خواهد کرد. باز هم در این سناریو فراخوانی اطلاعات تکراری وجود دارد.CesStopSelcetionChangedEvent اضافه شده که اگر مقدار آن true باشد رویداد اجرا نخواهد شد و به محض اینکه مقدار آن false شود رویداد صدا زده خواهد شد. با این ویژگی میشه کاملا مطمئن بود که بعد از اجرای تمام سناریوها و حسب نیاز رویداد اجرا خواهد شد.// توقف اجرای رویداد control.CesStopSelectedItemChangedEvent = true; // بارگذاری دادهها // انجام سناریوهای مربوط به توسعه برنامه //اجرای رویداد control.CesStopSelectedItemChangedEvent = false;