سلام توی سی شارپ WPF چطور میشه اطلاعات (آیتم ها) یک کمبوباکس رو بر اساس یک متن فیلتر کرد؟
به صورت پیش فرض خاصیت AutoComplete در کمبوباکس در WPF وجود نداره. شاید دیده باشید توی بعضی از سایت ها مثلا شما در بخش جستجو یک متنی رو وارد می کنید و متن های مشابه رو خودش پیشنهاد میده و احتمالا می خواید چنین کاری رو انجام بدید.
یه سری راه حل ها برای این کار وجود داره.
روش اول :
روش اول این هست که توی دستورات xaml دو خاصیت زیر رو بنویسید :
1-IsTextSearchEnabled = true.
2-IsEditable = true.
با خاصیت IsEditable میتونید توی کمبوباکس متن وارد کنید و با خاصیت IsTextSearchEnable هم متن وارد شده در آیتم های کمبوباکس جستجو میشه.
مثال :
<ComboBox x:Name="cmb_status" IsEditable="True" IsTextSearchEnabled="True"></ComboBox>
WPF Combobox with auto-complete/auto-filter
روش دوم :
اگر روش اول رو نمی خواهید انجام بدید میتونید فقط خاصیت IsEditable رو فعال کنید تا کاربر بتونه اطلاعاتی رو تایپ کنه. حالا هر چیزی که تایپ میشه باید مقدارش رو از طریق خاصیت TextChanged به سمت سرور بفرستید و اطلاعات رو بر طبق متن وارد شده فیلتر کنید و نمایش بدید. (دقت کنید این روش بار زیادی رو روی سرور وارد میکنه. چون اگر کاربری مرتبا یه سری متن رو تایپ کنه و حذف کنه تعداد دفعات زیادی باید اطلاعات به سمت سرور بره و نتیجه دریافت بشه از سمت دیتابیس)
این کار در سوال زیر (که ظاهرا سوال خودتون هم هست) گفته شده
جستجو متن در آیتم های کمبوباکس سی شارپ WPF
روش سوم :
در روش بعدی میتونید اطلاعات رو داخل یک List نگهداری کنید و در واقع این لیست رو فیلتر کنید. دقت کنید که در این روش هم به دلیل اینکه این لیست باید به صورت Public تعریف بشه و مادامی که فرم شما فعال هست مقادیرش حفظ بشه بنابراین یک باری روی سرور شما خواهد داشت.
public partial class win_report : Window
{
dynamic myList = null;
private void fillcombo()
{
var myList = database.Customers.Select(c => new {
c.CustomerName,
c.CustomerID
}).ToList();
}
}
در دستور بالا متغیری به نام myList داریم که CustomerName و CustomerID رو درون خودش داره. این متغیر مقادیر شما رو داره و به جای فیلتر اطلاعات و واکشی اطلاعات از دیتابیس میتونید این متغیر رو هر بار فیلتر کنید و اطلاعات رو نمایش بدید. (البته ممکنه نیاز به کمی کار داشته باشه چون خودم کامل تست نکردم ولی این روش جواب میده)
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1113
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
564
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
300
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
272
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4221
- پاسخ :
1
|
تاریخ :
1398/09/16
- ساعت :
11:41:00 AM
- بازدید :
4242
- پاسخ :
1
|
تاریخ :
1398/09/07
- ساعت :
02:15:00 PM
- بازدید :
3836
- پاسخ :
5
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
550
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3146
- پاسخ :
2
|
تاریخ :
1398/09/08
- ساعت :
11:38:00 PM
- بازدید :
3232
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
370
- پاسخ :
1
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
909
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
891
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1281
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4746
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1113
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
564
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
126
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
72
- پاسخ :
0
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
300
- پاسخ :
1
|