PDA

View Full Version : سوال: جستجو در کمبو باکس با استفاده از تکست باکس



ashkan1234
پنج شنبه 16 خرداد 1392, 20:30 عصر
سلام!
چطور میشه با استفاده از یک تکست باکس،داخل یه کمبو باکس جستجو کرد و مقدار مورد جستجو رو در کمبو باکس انتخاب کرد!
با تشکر!

tooraj_azizi_1035
پنج شنبه 16 خرداد 1392, 20:41 عصر
ComboBox1.SelectedIndex= ComboBox1.FindStringExact("whatYouWantToSearch");

ashkan1234
پنج شنبه 16 خرداد 1392, 21:07 عصر
ComboBox1.SelectedIndex= ComboBox1.FindStringExact("whatYouWantToSearch");

ممنون از پاسختون!
ولی بنده منظورم این نبود!
فکوس وقتی وارد تکست باکس میشه و اولین کلمه تایپ میشه،کمبو باکس باز میشه (تو اونت change تکست باکس قابلیت DroppedDown کمبو رو True کردم)و شروع میکنه به جستجو:
بصورتی که کلمه به کلمه سرچ میکنه و عملیات فیلترینک روش انجام میشه!
مثلا فرض کنید زدم Z فقط اونایی رو نمایش بده که با کلمه Z شروع میشن و بقیه رو فیلتر کنه!
و اونی که اول لیست هست رو انتخاب کنه!

alexmcse
پنج شنبه 16 خرداد 1392, 21:58 عصر
منظور شما این طور است
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
comboBox1.SelectedIndex = -1;
comboBox1.DroppedDown = false ;
}
else
{
comboBox1.SelectedIndex = comboBox1.FindString(textBox1.Text);
comboBox1.DroppedDown = true;
}
}

ashkan1234
پنج شنبه 16 خرداد 1392, 22:23 عصر
منظور شما این طور است
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
comboBox1.SelectedIndex = -1;
comboBox1.DroppedDown = false ;
}
else
{
comboBox1.SelectedIndex = comboBox1.FindString(textBox1.Text);
comboBox1.DroppedDown = true;
}
}

ممنونم!
تقریبا نزدیک شدیم!
درسته همینجوریه ولی اگر موقعی که داده موجود بود بقیه را فیلتر کند(بقیه لیست را نمایش ندهد)بهتره!البته اگر نشد هم مهم نیست!
ولی مهم اینه که کلید Enter عمل کنه و اون مقدار جستجو شده را انتخاب کنه!
یعنی با اینتر بشه مقدار یافت شده رو انتخاب کرد!
بازهم از پاسختون ممنونم!

ashkan1234
جمعه 17 خرداد 1392, 11:07 صبح
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData != Keys.Up && e.KeyData != Keys.Down && e.KeyData != Keys.Enter) return;
if (e.KeyData == Keys.Down)
{
comboBox1.DroppedDown = true;
comboBox1.SelectedIndex = comboBox1.Items.Count > comboBox1.SelectedIndex + 1
? comboBox1.SelectedIndex + 1
: comboBox1.SelectedIndex;
}
else if (e.KeyData == Keys.Up)
{
comboBox1.DroppedDown = true;
comboBox1.SelectedIndex = comboBox1.SelectedIndex - 1 > -1
? comboBox1.SelectedIndex - 1
: comboBox1.SelectedIndex;
}
else if (e.KeyData == Keys.Enter)
{
comboBox1.DroppedDown = false;
}
}
توی اونت keydown تکست باکس فلش بالا و پایین و اینتر را فعال کردم !(چون وقتی کمبو باکس dropdown میشه،نشانگر موس ناپدید میشه)و با استفاده از کلید بالا و پایین میشه مورد جستجو را انتخاب کرد!
با کلید اینتر هم گفتم که droppeddown=false بشه،تا کلمه مورد نظر انتخاب بشه!
ولی حالا یه مشکلی هست:بعضی از آیتمها رو که با اینتر انتخاب میکنم،انتخاب نمیشه و یکی دیگه از آیتمها(مخصوصا اولیه)انتخاب میشه!
آیا راهی نیست که مابقی آیتمهای کمبو که کلمه موردجستجو را دارا نیستند فیلتر شوند؟
آیا میشه واسه نشانگر موس کاری کرد که پیدا باشه؟

alexmcse
جمعه 17 خرداد 1392, 11:25 صبح
سلام
این رو امتحان کن برای اینتر کردن
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
MessageBox.Show(comboBox1.SelectedItem.ToString()) ;
}

ashkan1234
جمعه 17 خرداد 1392, 11:45 صبح
سلام
این رو امتحان کن برای اینتر کردن
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
MessageBox.Show(comboBox1.SelectedItem.ToString()) ;
}

ممنون!
ولی متاسفانه نمیخوام تو یه مسیج باکس نتیجه نمایش داده بشه!
میخوام که تو خود کمبوباکس انتخاب انجام بشه!

roolinjax
جمعه 17 خرداد 1392, 12:13 عصر
سلام من متوجه نشدم شما مثلا یه لیست زیادی توی کمبو دارید
بعد می خواید متنی که داخل تکست می نویسید توی کمبو سرچ بشه ؟
بقیه گزینه های داخل کمبو دیده نشه اصلا ؟
اگه اینطوره که باید اولا یا کمبو رو به منبع داده خودتون که احتمال بانک اطلاعاتی بایند کنید و بعد با دستورات اس کیو ال select کنید
و یا اینکه بایند نکنید و هر بار که سرچ می کنید با select لیست کمبو رو clear کنید و بعد دوباره موارد جدید رو بهش اضافه کنید
اوکی ؟

ashkan1234
جمعه 17 خرداد 1392, 12:19 عصر
سلام من متوجه نشدم شما مثلا یه لیست زیادی توی کمبو دارید
بعد می خواید متنی که داخل تکست می نویسید توی کمبو سرچ بشه ؟
بقیه گزینه های داخل کمبو دیده نشه اصلا ؟
اگه اینطوره که باید اولا یا کمبو رو به منبع داده خودتون که احتمال بانک اطلاعاتی بایند کنید و بعد با دستورات اس کیو ال select کنید
و یا اینکه بایند نکنید و هر بار که سرچ می کنید با select لیست کمبو رو clear کنید و بعد دوباره موارد جدید رو بهش اضافه کنید
اوکی ؟

بله دقیقا همینو میخوام!
بعضی از کمبوها بایند شده به بانک بعضی ها هم نه!
خوب چطوری میشه اینایی که میفرمایید رو عملی کرد؟!
بنده از روش Ado.net نرفتم و linq کارکردم!
اگه مقدوره بیشتر راهنمایی بفرمایید!

alexmcse
جمعه 17 خرداد 1392, 12:21 عصر
اولین ایتم پیدا شده رو در کمبو نشان می دهد
System.Collections.ArrayList arr = new System.Collections.ArrayList();
private void textBox2_TextChanged(object sender, EventArgs e)
{

int n = comboBox2.FindString(textBox2.Text);
comboBox2.SelectedIndex = n;
arr.Add(comboBox2.Items[n].ToString());
comboBox2.Items.Clear();
comboBox2.DataSource = arr;

}

roolinjax
جمعه 17 خرداد 1392, 12:30 عصر
بله دقیقا همینو میخوام!
بعضی از کمبوها بایند شده به بانک بعضی ها هم نه!
خوب چطوری میشه اینایی که میفرمایید رو عملی کرد؟!
بنده از روش Ado.net نرفتم و linq کارکردم!
اگه مقدوره بیشتر راهنمایی بفرمایید!

راستش من لینک زیاد کار نکردم اما اگر شما حاصل جستجو رو با دستور لینک بیرون کشیدین می تونین با دستور زیر دونه دونه موارد حاصل جستجو رو به لیست خودتون اضافه کنید.
comboBox1.Items.Clear();
for (int i = 0; i < تعداد رکوردهای حاصل; i++)
comboBox1.Items.Add("گزینه مورد نظر");
comboBox1.SelectedIndex = 0;
}

ashkan1234
جمعه 17 خرداد 1392, 12:53 عصر
راستش من لینک زیاد کار نکردم اما اگر شما حاصل جستجو رو با دستور لینک بیرون کشیدین می تونین با دستور زیر دونه دونه موارد حاصل جستجو رو به لیست خودتون اضافه کنید.
comboBox1.Items.Clear();
for (int i = 0; i < تعداد رکوردهای حاصل; i++)
comboBox1.Items.Add("گزینه مورد نظر");
comboBox1.SelectedIndex = 0;
}
مشکلی با بایند کردن و جستجو و اینا ندارم!
تمام آیتمها هم به درستی داخل کمبو قرار گرفتن!جستجو بدرستی انجام میشه!(البته علت زدن این تاپیک هم همین بوده که ببینم بدون استفاده از بایند کردن و دستورات Sql میشه داخل کمبو باکس جستجو کرد؟)
الان تنها مشکل و بزگترین مشکل اینه که اگه با فلش بالا و پایین ،یک آیتم را در کمبو باکس انتخاب کنم،کمبو باکس میره اولین آیتم در کمبو رو انتخاب مبکنه!
واسه این مسکل راهی دارید عایا؟؟؟

ashkan1234
جمعه 17 خرداد 1392, 12:57 عصر
اولین ایتم پیدا شده رو در کمبو نشان می دهد
System.Collections.ArrayList arr = new System.Collections.ArrayList();
private void textBox2_TextChanged(object sender, EventArgs e)
{

int n = comboBox2.FindString(textBox2.Text);
comboBox2.SelectedIndex = n;
arr.Add(comboBox2.Items[n].ToString());
comboBox2.Items.Clear();
comboBox2.DataSource = arr;

}
ممنون ولی این یکم مشکل داره!
وقتی تکست باکس یا کمبو باکس مقدارشون نال باشه ببینید چه اتفاقی براش میفته؟!با یه if کنترلش کردم ولی باز کمی پیچیده میشه!
به نظرتون راه ساده تری هم هست؟!

alexmcse
جمعه 17 خرداد 1392, 13:00 عصر
لیست رو فیلتر میکند
private void button1_Click(object sender, EventArgs e)
{

for (int i = 0; i < comboBox2.Items.Count ; i++)
{


var q = comboBox2.Items[i].ToString().Select(p => p.ToString() ==textBox2.Text );
foreach (var item in q)
{
if (item)
arr.Add(comboBox2.Items[i]);
else
break;
}
}
comboBox2.Items.Clear();
comboBox2.DataSource = arr;
}