View Full Version : ساخت CheckBox دینامیک
amirhossein_z
شنبه 27 آبان 1402, 23:28 عصر
سلام خدمت دوستان و مهندسین محترم.
می خواستم بدونم کسی می تونه راهنمایم کنه چطور میشه داخل StackPanel با توجه به یک ستون خاص در sql (مثلا ستون نام شهرها) با توجه به تعداد شهرهایی که داخل دیتابیس نوشته شده یا حتی بعدا اضافه میشه ، CheckBox برای انتخاب اون آیتم به صورت تکی یا انتخاب چند مورد مثلا برای جستجو درست کرد...
داخل فرم wpf یک StackPanel قرار دادم به اسم st1 و به دیتابیس sql متصل هست کد برای ساختن CheckBox به صورت زیرنوشتم
() private void Dynamic
{
;()var itemlist = MyDataBase.CityName.ToList
foreach (var itemAZ in itemlist)
{
;()CheckBox chk = new CheckBox
;()chk.Content = itemAZ.branch_Name.ToString
;st1.Children.Add(chk)
}
}
کد بالا در فرم لود قرار می دم اسامی شهرهای داخل دیتابیس میاد فقط نمی تونم وقتی یک یا چندتا از آیتم هارو انتخاب می کنم اسامی اون بعد از انتخاب به داخل textbox متنقل بشه ..
ممنون میشم راهنمایی کنید :متفکر:
SajjadKhati
جمعه 03 آذر 1402, 17:17 عصر
سلام
از سی شارپ چرا استفاده میکنید؟
از کد xaml استفاده کنید .
از DataTemplate و Binding استفاده کنید .
مثلا ItemsControl (مثل ListBox) ای را که به یک کالکشن (مثلا لیست نام شهرها) Binding کردید ، یک DataTemplate ای را برای اون ListBox بنویسید (پروپرتی ItemTemplate ئه ListBox را مقداردهی کنید) که این DataTemplate ، یک CheckBox داشته باشه .
amirhossein_z
سه شنبه 07 آذر 1402, 22:31 عصر
ممنون از پاسخی که دادید. الان حالت StackPanel به ListBox تغییر دادم و اسامی شهرهای داخل دیتابیس به صورت CheckBox در داخل ListBox نمایش داده شده.میشه راهنمایی کنید چطور با انتخاب چند شهر باهم یا انتخاب تکی شهر با زدن چک باکس نام شهر ، فقط اطلاعات مربوط به شهرهای انتخابی درون دیتاگریدویو نمایش داده بشه؟
شبیه این سایتهای فروشگاهی که نتیجه جستجو براساس فیلدهای انتخابی محدود می کنه...
مثلا یه دونه Button باشه که با زدنش آیتمهای انتخابی فقط نمایش بده:ناراحت:
barnamenevisjavan
جمعه 10 آذر 1402, 20:35 عصر
سلام خدمت دوستان و مهندسین محترم.
می خواستم بدونم کسی می تونه راهنمایم کنه چطور میشه داخل StackPanel با توجه به یک ستون خاص در sql (مثلا ستون نام شهرها) با توجه به تعداد شهرهایی که داخل دیتابیس نوشته شده یا حتی بعدا اضافه میشه ، CheckBox برای انتخاب اون آیتم به صورت تکی یا انتخاب چند مورد مثلا برای جستجو درست کرد...
داخل فرم wpf یک StackPanel قرار دادم به اسم st1 و به دیتابیس sql متصل هست کد برای ساختن CheckBox به صورت زیرنوشتم
() private void Dynamic
{
;()var itemlist = MyDataBase.CityName.ToList
foreach (var itemAZ in itemlist)
{
;()CheckBox chk = new CheckBox
;()chk.Content = itemAZ.branch_Name.ToString
;st1.Children.Add(chk)
}
}
کد بالا در فرم لود قرار می دم اسامی شهرهای داخل دیتابیس میاد فقط نمی تونم وقتی یک یا چندتا از آیتم هارو انتخاب می کنم اسامی اون بعد از انتخاب به داخل textbox متنقل بشه ..
ممنون میشم راهنمایی کنید :متفکر:
سلام شما همینجا که چکباکس رو ساختی براش ایونت checked و uncheked رو ایجاد کنید و کد دلخواه رو بنویسید
amirhossein_z
یک شنبه 12 آذر 1402, 22:24 عصر
میشه بیشتر توضیح بدید...
من گزینه های داخل ListBox براساس گزینه های دیتابیس به صورت CheckBox درآوردم (نام هر شهری جدید اضافه بشه خودکار داخل لیست باکس به صورت چک باکسی نمایش داده میشه)
الان مثلا یکسری اطلاعات براساس نام شهر وارد شده و قصد داریم این اطلاعات براساس شهرهایی که از داخل لیست انتخاب میشه ، نمایش داده بشه ،
مثلا شهر تهران - جمعیت 12 میلیون
مشهد - جمعیت 8 میلیون
اصفهان - جمعیت 5 میلیون
حالا اگر مشهد و تهران انتخاب شد با زدن دکمه داخل دیتاگرید نام شهر و جمعیت همین دو شهر نشادن داده بشه ، تکی هم انتخاب شده به صورت تک:ناراحت:
Mahmoud.Afrad
سه شنبه 21 آذر 1402, 04:16 صبح
الان مشکل تشخیص شهرهای تیک خورده است یا ایجاد کوئری؟
ROSTAM2
سه شنبه 21 آذر 1402, 07:14 صبح
میشه بیشتر توضیح بدید...
من گزینه های داخل ListBox براساس گزینه های دیتابیس به صورت CheckBox درآوردم (نام هر شهری جدید اضافه بشه خودکار داخل لیست باکس به صورت چک باکسی نمایش داده میشه)
الان مثلا یکسری اطلاعات براساس نام شهر وارد شده و قصد داریم این اطلاعات براساس شهرهایی که از داخل لیست انتخاب میشه ، نمایش داده بشه ،
مثلا شهر تهران - جمعیت 12 میلیون
مشهد - جمعیت 8 میلیون
اصفهان - جمعیت 5 میلیون
حالا اگر مشهد و تهران انتخاب شد با زدن دکمه داخل دیتاگرید نام شهر و جمعیت همین دو شهر نشادن داده بشه ، تکی هم انتخاب شده به صورت تک:ناراحت:
سلام.
مگه لست باکسی که دارید خصوصیت CheckedItems نداره؟!!!!!!!
SajjadKhati
دوشنبه 27 آذر 1402, 07:30 صبح
ممنون از پاسخی که دادید. الان حالت StackPanel به ListBox تغییر دادم و اسامی شهرهای داخل دیتابیس به صورت CheckBox در داخل ListBox نمایش داده شده.میشه راهنمایی کنید چطور با انتخاب چند شهر باهم یا انتخاب تکی شهر با زدن چک باکس نام شهر ، فقط اطلاعات مربوط به شهرهای انتخابی درون دیتاگریدویو نمایش داده بشه؟
شبیه این سایتهای فروشگاهی که نتیجه جستجو براساس فیلدهای انتخابی محدود می کنه...
مثلا یه دونه Button باشه که با زدنش آیتمهای انتخابی فقط نمایش بده:ناراحت:
سلامی مجدد
شما wpf کار میکنید اما از قابلیت هاش استفاده نمیکنید و بصورت دستی کد مینویسید .
این ، کارتون را در کدهای پیچیده ، سخت میکنه .
شما طبق توضیحات تون میخواید فیلتر کنید .
wpf برای این کار ، CollectionView (و CollectionViewSource) را داره که باید بهش Binding کنید .
وقتی شما به یک مجموعه (مثل List و ...) ، Binding میکنید ، مستقیما به اون شیِ مجموعه Binding نمیشه ، بلکه به شی CollectionView ای که خودش از اون مجموعه ی اصلی (مثل List و ...) استفاده میکنه ، Binding میشه .
بعد شما میتونید اون CollectionView را فیلتر کنید که مستقیما در شیِ Binding ای که بهش شده ، نمایش میده .
How to: Filter Data in a View - WPF .NET Framework | Microsoft Learn (https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-filter-data-in-a-view?view=netframeworkdesktop-4.8)
Filtering Elements in a Collection in WPF (c-sharpcorner.com) (https://www.c-sharpcorner.com/UploadFile/20c06b/filtering-elements-in-a-collection-in-wpf/)
old-wpf-blog/29-MultipleFilters at master · bstollnitz/old-wpf-blog · GitHub (https://github.com/bstollnitz/old-wpf-blog/tree/master/29-MultipleFilters)
اما اگر از CollectionView استفاده نمیکنید (که مخصوصا در برنامه های بزرگ پیشنهاد نمیکنم که از این روش استفاده نکنید) ، حداقل میتونید از فقط Binding استفاده کنید . این طوری که یک مجموعه (مثل لیست و ...) ی مجزا برای فیلتر بسازید و DataGrid یا کنترل مورد نظرتون را بهش Binding کنید .
اما شما کاملا از روش دستی دارید استفاده میکنید و در رویدادتون کد مینویسید که کارتون را برای ویرایش و ... سخت میکنه .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.