PDA

View Full Version : جستجو در کومبو



csharpprogramer88
سه شنبه 08 مرداد 1392, 19:16 عصر
اگر من بخوام روی کومبو (بدون اتصال به دیتابیس) سرچ انجام بدم باید چیکار کنم؟

مثلا در کومبوی نام کالا 6 تا آیتم داریم : برنج - شکر- آبلیمو- چیپس - لواشک-شامپو-

اول که موقع لود فرم به کومبو اطلاعات را بایند کردم حالا میخوام وقتی کاربر کومبو را انتخاب کرد و توی کومبو وارد کرد ""ش"" هر چیزی که با ش شروع میشه در کومبو نمایش بده و بقیه آیتم ها حذف بشه سپس کاربر با انتخاب هر آیتم اون آیتم در دیتابیس ذخیره بشه

تشکر

hojjatshariffam
سه شنبه 08 مرداد 1392, 21:53 عصر
یه راهش استفاده از AutoCompleteStringCollection می باشد که فکر کنم اصولیش اینه

ولی یه راهش دیگش اینه که اطلاعات داخل کامبورو اول بریز تو یک دیتا ویو بعد کلشو بریز تو کمبو
بعدش باید تو رویداد تکست چنجش بری و به ویو فیلتر بدی و دوباره دیتا ویو رو بریزی داخل کامبو و با کد کامبو رو باز کنی

اینم یه راه بود

hojjatshariffam
سه شنبه 08 مرداد 1392, 22:21 عصر
اینم کد :

var str = new AutoCompleteStringCollection();
str.AddRange(new[] {"ملت", "ملی", "مسکن", "صادرات", "تجارت"});

comboBox1.AutoCompleteCustomSource = str ();
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;


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

csharpprogramer88
سه شنبه 08 مرداد 1392, 23:17 عصر
فک کنم کومبو انتخاب کنم و از property خاصیت AutoCompleteMode برابر Suggest بزارم حل بشه اره؟

csharpprogramer88
چهارشنبه 09 مرداد 1392, 21:57 عصر
با سلام

کدی من فرستادم مشکلمو حل میکنه یعنی میتونم بازدن (ش) هر چیزی که با ش شروع میشه را لیست کنه ولی یه مشکلی هست برای انتخاب یا باید با ماوس آیتم مورد نظر را انتخاب کنم یا بایدبا کلید جهتی آیتم را انتخاب کنم و تب را بزنم تا آن آیتم انتخاب شود

حال چطوری میتونم کاری کنم با سرچ آیتم کاربر بتونه آیتم مورد نظرش را با کلید اینتر انتخاب کنه؟ و نیاز به انتخاب با ماوس را گلید تب نداشته باشه

hojjatshariffam
چهارشنبه 09 مرداد 1392, 22:49 عصر
این کد مشکلی نداره
با اینتر هم انتخاب میشه
می دونی مشکل کجاست ؟ وقتی شما با ماوس کامبو رو باز کردین و بعدش یه چیزی روتایپ کردین ، اون موقع اینتر ارجهیتش برای بستن کامبو هستش نه انتخاب ، وگر نه اگر کامبو رو باز نکنید ، و فقط تایپ کنید ، در این صورت با اینتر هم انتخاب میشه
ضمنا تو این خط کدتون ، var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Select(x => x.name_kala).Distinct() نیازی نیست گه اسم کالا رو دوباره سکلت کنید ، بلکه می تونید یه خط کد دیگه هم اضافه کنید اونم اینه

var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct();
comboBox1.DataSource = Result;
comboBox1.DisplayMember = "name_kala";
comboBox1.ValueMember = "ID";

با اون خز آخر می تونید در انتخاب و درج دادتون استفاده کنید .
مثلا اگر قرار باشه که ID انتخاب شما ، به عنوان کلید خارجی بره تو یه جدولی ، می تونید از این استفاده کنید.

csharpprogramer88
چهارشنبه 09 مرداد 1392, 23:02 عصر
این کد مشکلی نداره
با اینتر هم انتخاب میشه
می دونی مشکل کجاست ؟ وقتی شما با ماوس کامبو رو باز کردین و بعدش یه چیزی روتایپ کردین ، اون موقع اینتر ارجهیتش برای بستن کامبو هستش نه انتخاب ، وگر نه اگر کامبو رو باز نکنید ، و فقط تایپ کنید ، در این صورت با اینتر هم انتخاب میشه
ضمنا تو این خط کدتون ، var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Select(x => x.name_kala).Distinct() نیازی نیست گه اسم کالا رو دوباره سکلت کنید ، بلکه می تونید یه خط کد دیگه هم اضافه کنید اونم اینه

var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct();
comboBox1.DataSource = Result;
comboBox1.DisplayMember = "name_kala";
comboBox1.ValueMember = "ID";

با اون خز آخر می تونید در انتخاب و درج دادتون استفاده کنید .
مثلا اگر قرار باشه که ID انتخاب شما ، به عنوان کلید خارجی بره تو یه جدولی ، می تونید از این استفاده کنید.


با این کد شما ،فقط میتونم آیدی را به کومبو بایند کنم در صورتیکه من میخام نام کالا را ببینم

hojjatshariffam
چهارشنبه 09 مرداد 1392, 23:10 عصر
با این کد شما ،فقط میتونم آیدی را به کومبو بایند کنم در صورتیکه من میخام نام کالا را ببینم
نه عزیزم با این کن اونی که برای شما نشون میده نام کالاست ولی اونی که انتخاب میشه ID هستش
این کد رو تو رویداد SelectedIndexChanged برای کامبوت اضافه کن خودت متوجه میشی

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex >= 0)
textBox1.Text = comboBox1.SelectedValue.ToString();
}

csharpprogramer88
چهارشنبه 09 مرداد 1392, 23:21 عصر
این کد مشکلی نداره
با اینتر هم انتخاب میشه
می دونی مشکل کجاست ؟ وقتی شما با ماوس کامبو رو باز کردین و بعدش یه چیزی روتایپ کردین ، اون موقع اینتر ارجهیتش برای بستن کامبو هستش نه انتخاب ، وگر نه اگر کامبو رو باز نکنید ، و فقط تایپ کنید ، در این صورت با اینتر هم انتخاب میشه
ضمنا تو این خط کدتون ، var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Select(x => x.name_kala).Distinct() نیازی نیست گه اسم کالا رو دوباره سکلت کنید ، بلکه می تونید یه خط کد دیگه هم اضافه کنید اونم اینه

var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct();
comboBox1.DataSource = Result;
comboBox1.DisplayMember = "name_kala";
comboBox1.ValueMember = "ID";

با اون خز آخر می تونید در انتخاب و درج دادتون استفاده کنید .
مثلا اگر قرار باشه که ID انتخاب شما ، به عنوان کلید خارجی بره تو یه جدولی ، می تونید از این استفاده کنید.




Select(x => x.name_kala).Distinct()

من با این کد دارم نام کالا را میگیرم شرط هم میزارم که کد کالا id_goruh_kala برابر یک باشه

ولی در کد شما من نمیبینم که نام کالا انتخاب باشه که کاربر بتونه با انتخاب نام کالا کد کالا را بر گردونه

csharpprogramer88
چهارشنبه 09 مرداد 1392, 23:32 عصر
اهان فک کنم به خاطر عدم تسلط روی EF منظور شما را نفهمیدمم


احتمالا با این کوئری
var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct(); میتونم به کل فیلدها از جمله نام کالا دسترسی داشته باشم

comboBox1.DisplayMember = "name_kala"; که این بیانگر اینه که کومبو نام کالا را نشان بده و
comboBox1.ValueMember = "ID"; بیانگر اینکه با انتخاب هر آیتم آیدی مربوطه برگشت بشه

hojjatshariffam
چهارشنبه 09 مرداد 1392, 23:43 عصر
اهان فک کنم به خاطر عدم تسلط روی EF منظور شما را نفهمیدمم


احتمالا با این کوئری
var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct(); میتونم به کل فیلدها از جمله نام کالا دسترسی داشته باشم

comboBox1.DisplayMember = "name_kala"; که این بیانگر اینه که کومبو نام کالا را نشان بده و
comboBox1.ValueMember = "ID"; بیانگر اینکه با انتخاب هر آیتم آیدی مربوطه برگشت بشه
بله دقیقا
به EF هم ربطی نداره ، من اصلا از EF استفاده نمی کنم چون یکم خشکه ، من برا خودم یه کد جنریتور نوشتم و با اون کدامو درست می کنم ولی معلومه که شما تو این مثال کل داده های جدول رو فچ کردین بعد از اونا فقط فیلد نام کالا رو ریختین تو متغییرتون ، ولی باید بگم که اصلا اینا لازم نیست
تازه یه کار دیگه هم می تونی بکنی اونم کل ردیف رو بزاری تو datasourc چون از نوع object می گیره. البته برای جداول بزرگ مناسب نیست ولی چون جدول شما سه چهار تا فیلد بیشتر نداره مشکلی از نظر حافظه پیش نمیاد.
به هر حال خوشحالم که مشکلتون حل شد

csharpprogramer88
پنج شنبه 10 مرداد 1392, 16:18 عصر
این کد مشکلی نداره
با اینتر هم انتخاب میشه
می دونی مشکل کجاست ؟ وقتی شما با ماوس کامبو رو باز کردین و بعدش یه چیزی روتایپ کردین ، اون موقع اینتر ارجهیتش برای بستن کامبو هستش نه انتخاب ، وگر نه اگر کامبو رو باز نکنید ، و فقط تایپ کنید ، در این صورت با اینتر هم انتخاب میشه
ضمنا تو این خط کدتون ، var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Select(x => x.name_kala).Distinct() نیازی نیست گه اسم کالا رو دوباره سکلت کنید ، بلکه می تونید یه خط کد دیگه هم اضافه کنید اونم اینه

var Result = db.tbl_cmb.Where(M => M.id_goruh_kala == 1).Distinct();
comboBox1.DataSource = Result;
comboBox1.DisplayMember = "name_kala";
comboBox1.ValueMember = "ID";

با اون خز آخر می تونید در انتخاب و درج دادتون استفاده کنید .
مثلا اگر قرار باشه که ID انتخاب شما ، به عنوان کلید خارجی بره تو یه جدولی ، می تونید از این استفاده کنید.


اگر هیچ شرطی نخواهم بگذارم باید چه کوئری بنویسم؟ یعنی کل نام کالا distinct بشه؟