PDA

View Full Version : سوال: نمایش suggestion برای اسامی افراد حتی در صورت تایپ فامیل



ostovarit
یک شنبه 23 مرداد 1390, 21:04 عصر
با سلام
با استفاده از خاصیت Suggrstion و Autocomplete میشه در زمان تایپ در تکست باکس یا کمبو باکس لیستی از آیتم های موجود در دیتابیس رو به کاربر نشون بدیم تا در صورتی که آیتم مورد نظر در لیست بود دیگه نیاز به تایپ کامل نباشه در حال حاضر لیست اشخاص رو در یک تکست باکس به کاربر نشون میدم و اگر کاربر نام شخص مورد نظر رو بزنه نام و فامیل کامل بهش پیشنهاد داده میشه و میتونه از لیست اون رو انتخاب کنه... حالا من میخوام قابلیتی به این Suggrstion اضافه کنم که اگر فامیل طرف رو هم وارد کرد باز تو لیست پیشنهادی نشون داده بشه ... دوستان کسی این کار رو کرده یا میدونه چطور باید انجامش بدیم؟


با تشکر

navid_8x
دوشنبه 24 مرداد 1390, 18:28 عصر
من از Listbox برای این کار استفاده کردم.

public partial class Form1 : Form
{
Control Focused;
public Form1()
{
InitializeComponent();
listBox1.Hide();
Focused = null;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
Control c=sender as Control;
Focused = c;
listBox1.Location = new Point(c.Left, c.Top + c.Height + 10);
listBox1.Items.Clear();
listBox1.Items.AddRange(GetSuggestions(c.Text));
listBox1.Show();
}
private void textBox1_Leave(object sender, EventArgs e)
{
listBox1.Hide();
}

private string[] GetSuggestions(string part)
{
List<string> l=new List<string>();
using (SqlConnection con = new SqlConnection(""))
{
SqlCommand com=new SqlCommand("select Name From MYData Where Name Like "+ part +"%");
con.Open();
SqlDataReader r=com.ExecuteReader();
for (int i = 0; i < r.FieldCount; i++)
l.Add(r.GetString(i));
con.Close();
}
return l.ToArray();

}

private void listBox1_DoubleClick(object sender, EventArgs e)
{
Focused.Text = listBox1.SelectedItem as string;
}



}

ostovarit
پنج شنبه 27 مرداد 1390, 19:50 عصر
تو این حالت که نوشتید هر یک حرفی که در تکست باکس وارد بشه باید یک بار به دیتابیس کانکت کنیم و یک سلکت بزنی ... اگر 10000 رکورد باشه خیلی سنگین و کند میشه ... این راه به نظرم درست نیست... با این حال از اینکه زمان گذاشتی و پاسخ دادی ممنون

morteza271
پنج شنبه 27 مرداد 1390, 20:06 عصر
چون شما میخواین بر اساس نام و فامیل هایی که توی دیتابیس هستند لیست رو نمایش بدین بایستی به ازای هر کاراکتری که توی تکست باکس نوشته میشه یک کوئری اجرا کنید و به دیتابیس Connect بشین.
ولی به جای اینکه از ListView استفاده کنید میتونید خروجی کوئری رو به خاصیت AutoCompleteCustomSource از تکست باکس پاس بدین و خاصیت AutoCompleteSource از تکست باکس رو برابر CustomSource بذارید.
اینطوری نیازی به ListView نیست ولی اگر از روش دوستمون استفاده کنید میتونید این کار رو زیبا طراحی کنید وگرنه راهی به جز اتصال به دیتابیس و اجرای کوئری ندارید.
موفق باشید.

ostovarit
دوشنبه 31 مرداد 1390, 14:08 عصر
چون شما میخواین بر اساس نام و فامیل هایی که توی دیتابیس هستند لیست رو نمایش بدین بایستی به ازای هر کاراکتری که توی تکست باکس نوشته میشه یک کوئری اجرا کنید و به دیتابیس Connect بشین.
ولی به جای اینکه از ListView استفاده کنید میتونید خروجی کوئری رو به خاصیت AutoCompleteCustomSource از تکست باکس پاس بدین و خاصیت AutoCompleteSource از تکست باکس رو برابر CustomSource بذارید.
اینطوری نیازی به ListView نیست ولی اگر از روش دوستمون استفاده کنید میتونید این کار رو زیبا طراحی کنید وگرنه راهی به جز اتصال به دیتابیس و اجرای کوئری ندارید.
موفق باشید.

من یک کمبو باکس دارم که خاصیت AutoCompleteCustomSource رو برابر کوئری که از دیتابیس میگیرم قرار دادم ... کار هم میکنه ... فقط نحوه پیشنهاد دادنش رو میخوام تغییر بدم و هم از روی نام و هم از روی فامیل این کار صورت بگیره ... این مطلبی که نوشتید هیچ راه حلی رو من توش ندیدم ... لطفا بیشتر توضیح بدید

morteza271
دوشنبه 31 مرداد 1390, 15:14 عصر
برای اینکه هم از روی نام و هم از روی فامیل پیشنهاد بده باید کوئری رو تغییر بدین.
اگه کوئری تون رو بذارین اینجا درستش میکنم براتون میذارم.
موفق باشید

morteza271
دوشنبه 31 مرداد 1390, 15:54 عصر
سلام دوست عزیز الان می خواستم همین چیزی که شما میخواین رو انجام بدم متوجه شدم اینطوری که میخواین با استفاده از خاصیت های خود تکست باکس امکان پذیر نیست و اگه میخواین این کار روئ بکنید باید خودتون دست به کار بشید و درستش کنید.
مثلا با استفاده از listView لیست پیشنهادی رو خودتون به کاربر نشون بدین یا هر جور دیگه وگرنه با استفاده از خاصیت AutoCompleteCustomeSource این کار امکانپذیر نیست.
موفق باشید

ostovarit
دوشنبه 31 مرداد 1390, 19:19 عصر
سلام دوست عزیز الان می خواستم همین چیزی که شما میخواین رو انجام بدم متوجه شدم اینطوری که میخواین با استفاده از خاصیت های خود تکست باکس امکان پذیر نیست و اگه میخواین این کار روئ بکنید باید خودتون دست به کار بشید و درستش کنید.
مثلا با استفاده از listView لیست پیشنهادی رو خودتون به کاربر نشون بدین یا هر جور دیگه وگرنه با استفاده از خاصیت AutoCompleteCustomeSource این کار امکانپذیر نیست.
موفق باشید

:لبخند: اینی که الان نوشتی تازه سوال من بود!!! میدونم با AutoComplete نمیشه ...

دوستان اگر کسی انجام داده یا راه حلی داره لطف کنه پیشنهاد بده