PDA

View Full Version : سوال: مشکل با AutoComplete کمبو باکس



sds1920
پنج شنبه 01 تیر 1391, 19:33 عصر
سلام.
من يک کمبو باکس دارم که مي خوام حالت AutoCompele اون به اين صورت باشه که کاربر هر رشته اي رو که وارد کرد ، تمام ايتم هايي که شامل اون رشته مي شن نمايش داده بشه.(خودتون مي دونيد که اين کار با خواص کمبوباکس امکان پذير نيست و به صورت پيش فرض ايتم هايي رو نشون ميده که اولشون با رشته مورد نظر شروع بشه) من براي حل مشکلم کد زير رو توي رويداد TextCehnged کمبو باکسم نوشتم ولي دو تا مشکل داره.



cmbName.AutoCompleteSource = AutoCompleteSource.CustomSource;

DataView dv = new DataView(DSet.Tables["Persons"]);
dv.RowFilter = "Names LIKE '*" + cmbName.Text + "*'";

AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
foreach (DataRow dr in dv.ToTable().Rows)
acsc.Add(dr["Names"].ToString());
cmbName.AutoCompleteCustomSource = acsc;


مشکل اول اينه که اين کد کار نمي کنه و چيزي رو که من مي خوام بهم نمي ده.
مشکل دوم اينه که گاهي اوقات خطاي زير رو مي ده.

Attempted to read or write protected memory

ممنون مي شم اگه هر کدوم از مشکلاتي رو که مي دونيد حلش کنيد.سه روز هست دارم روش کار مي کنم اما نمي شه :ناراحت:

jmfnima
پنج شنبه 01 تیر 1391, 21:19 عصر
سلام دوست عزیز
ببین این به کارت میاد ؟؟

sds1920
جمعه 02 تیر 1391, 11:39 صبح
سلام دوست عزیز
ببین این به کارت میاد ؟؟

ممنون.ولي اين چيزي نيست که من مي خواستم.
من مي خوام مثلا وقتي 'ع' وارد ميشه تمام اسامي که شامل 'ع' مي شن ليست بشه.اگه شد "عل" تمام اسامي که شامل اين رشته مي شن نشون داده بشه.نمي خوام فقط اسامي که اولشون "عل" هست بياد.

programerinfonet
جمعه 02 تیر 1391, 14:46 عصر
یک چیز تو مایه های like

laleh_gb
پنج شنبه 29 تیر 1391, 10:44 صبح
کسی جوابی برای این تایپیک نداره؟؟؟؟؟؟؟؟

Mohandes2009
پنج شنبه 05 مرداد 1391, 23:49 عصر
از دستور Contante باید استفاده کنی

Mahmoud.Afrad
جمعه 06 مرداد 1391, 01:41 صبح
اگر در رویداد تکست چنج دیتاتیبل فیلتر کنید باعث میشه آیتم ها عوض بشن این هم باعث میشه تکست عوض بشه و رویداد تکست چنج دوباره اجرا بشه و خوب تا بینهایت همینطور.
از رویدادی استفاده کنید به متن کمبو حساس نباشه مثلا keyup .
private void Form1_Load(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from tbl", con);
da.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
}

StringBuilder oldValue = new StringBuilder();
private void comboBox1_KeyUp(object sender, KeyEventArgs e)
{
oldValue.Clear();
oldValue.Append(comboBox1.Text);
dt.DefaultView.RowFilter = "name like '%" + comboBox1.Text + "%'";
comboBox1.DroppedDown = true;
comboBox1.Text = oldValue.ToString();
comboBox1.Select(comboBox1.Text.Length , 0);
}

private void comboBox1_DropDownClosed(object sender, EventArgs e)
{
if (dt.DefaultView.ToTable().Rows.Count == 0)
dt.DefaultView.RowFilter = "";
}