PDA

View Full Version : تغییر autocomplete مربوط به combobox



noroozifar
شنبه 08 آذر 1393, 16:10 عصر
سلام
زمانی کاربر در کامبوباکس تایپ میکنه اگر autocomplete مربوط به ان تنظیم کنیم به SuggestAppend تنظیم کنیم لیست ایتمهایش را میاورد ولی یک مشکل دارد ان هم اینکه براساس اول حروف میاورد ولی من می خواهم به صورتی دیگر بیاورد مثلا اگر حرف "در" را تایپ کردم به صورت زیر بیاورد یک حالتی مثل دستور like در sql:

درب
دریچه
کادر
باددر
بادرآمدر

ولی به صورت حالت پیش فرض به این صورت لیست میاورد :

درب
دریچه

کدهای زیر را نوشتم جواب نداد

private void frmProjects_Load(object sender, EventArgs e)
{
var ListMohandesin = (from item in _db.UserProfiles
orderby item.Family
select new
{
DisplayMember = item.Name + " " + item.Family,
ValueMember = item.UserId
}).ToList();

mcmbTMemary.DataSource = ListMohandesin;
mcmbTMemary.DisplayMember = "DisplayMember";
mcmbTMemary.ValueMember = "ValueMember";
mcmbTMemary.SelectedIndex = -1;
mcmbTMemary.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
mcmbTMemary.AutoCompleteSource = AutoCompleteSource.CustomSource;

}
private void mcmbTMemary_KeyPress(object sender, KeyPressEventArgs e)
{


mcmbTMemary.AutoCompleteCustomSource.OfType<string>().Where(a => a.ToLower().Contains(mcmbTMemary.Text.ToLower())). Any();
}

mojtabamalaekeh
شنبه 08 آذر 1393, 17:42 عصر
سلام
AutoComplete با فیلتر کردن آیتم های لیست ارتباطی نداره. AutoComplete برای راحتی در تایپ کردن موردیه که از قبل توی لیست هستش.

تازه کمبوباکس اگه آیتم هاش فیلتر بشن هم، تا لیست کشویی باز نشه چیزی معلوم نمیشه.

شاید باید یک لیست بذارین که بالاش یه تکست باشه و با تایپ کردن توش فیلتر بشه.

کد فعلی AutoComplete معمولی رو هم پیاده سازی نمیکنه مگر این که mcmbTMemary.AutoCompleteSource رو برابر AutoCompleteSource.ListItems بذارین.

و اما کدی که توی رویداد KeyPress نوشتین: فقط میدونم تایع Any خروجیش از نوع bool هست و توی این رویداد هیچ اتفاقی نمی افته اما لطف کنید بگین هدف شما از نوشتن این خط کد چی بوده چون مدتیه با linq کار میکنم دوست دارم یاد بگیرم.

davidrobert
شنبه 08 آذر 1393, 18:26 عصر
یک تیکس باکس بزار برای برنامه ات و این دستور ها رو بنویم درس فرمت.
void codeForoshande()
{
try
{
AutoCompleteStringCollection autoComplete = new AutoCompleteStringCollection();
var q = db.TBl_SaleAndBuy.Distinct();
foreach (var blSaleAndBuy in q)
{
string val = System.Convert.ToString(blSaleAndBuy.SB__Salescler k_Code);
autoComplete.Add(val);
}
TxtSaleCode.AutoCompleteMode = AutoCompleteMode.Suggest;
TxtSaleCode.AutoCompleteSource = AutoCompleteSource.CustomSource;
TxtSaleCode.AutoCompleteCustomSource = autoComplete;
}
catch (Exception)
{
ClsShowMessageBoxError.Error(102, "165");
}
}
و حالا این دستور ها رو نوشتی در فرم لود
دستورت رو صدا کردن به این صورت.
private void Frm_Add_Foctor_Khered_Kala_Load(object sender, EventArgs e)
{
codeForoshande();
} درست همون چیزی که میخواهی میشه خیلی باحالی خود من هم از این دستور استفاده میکنم.

noroozifar
شنبه 08 آذر 1393, 19:48 عصر
دوستان تشکر روش دوم فکر کنم بهتر باشه فقط یک مشکل داشت اونهم اینکه من کلید هر انتخاب فرد را گذاشته بودم در ValueMember مربوط به کامبو اگر از تکست باکس استفاده کنم میگذارم در tag فکر کنم درست بشه

فقط یک مشکل دیگه وجود داره لیستی که نشون میده در سمت چپ قرار داره در صورتی که لیست باکس ما از راست به چپه ؟؟

davidrobert
یک شنبه 09 آذر 1393, 16:38 عصر
این دستور برای کامبوباکس هستش برای نشان دادن اطلاعات در کامبوباکس
var q = db.Tbl_Business;
CmbShobe.Items.Clear();
foreach (var tblBusiness in q)
{
CmbShobe.Items.Add(tblBusiness.B_Shobe);
}
در فرم لود نوشته شود.