PDA

View Full Version : سوال: مشاهده نتایج جستجو در combobox موجود در GridView در همان لحظه



amireto
دوشنبه 20 دی 1389, 21:56 عصر
با سلام خدمت دوستان
من یک ستون comboBox در DataGridView دارم میخوام بر اساس متنی که کاربر داره وارد میکنه در همان لحظاه جستجو را در چند جدول انجام بده و نتیجه رو در لیست باز شو نمایش بده
برای این کار از کد زیر استفاده کردم






private void grdPaziresh_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (grdPaziresh.CurrentCell.ColumnIndex==2)
{
e.Control.TextChanged += grdPaziresh_TextChanged;
}

}

private void grdPaziresh_TextChanged(object sender, EventArgs e)
{
var list = (from p in db.kala
where p.Name.ToUpper().Contains(grdPaziresh.CurrentRow.C ells["dName"].Value.ToString().ToUpper())
select new { name = p.Name, ID = p.ID, type = "d" }).Union
(from p in db.Brands
where p.Brandname.Contains(grdPaziresh.CurrentRow.Cells["dName"].Value.ToString())
select new { name = p.Brandname, ID = p.BrandID, type = "b" }).Union
(from p in db.ProductBrands
where p.ProductName.Contains(grdPaziresh.CurrentRow.Cell s["dName"].Value.ToString())
select new { name = p.ProductName, ID = p.BrandID, type = "p" });
dName.DataSource = list;
dName.DisplayMember = "name";
ComboBox comboBox = (ComboBox)grdPaziresh.EditingControl;
comboBox.DroppedDown = true;
}


مشکل من این هست که در همان لحظه در لیست باز شو نتیجه را نمایش نمی دهد بلکه پس از validate سلول نتیجه رو نمایش می دهد.
آیا راهی برای این کار هست؟
و یا اصلا با این روش می توان به نتیجه رسید ؟
ویا روش بهتری وجود داره ؟

عکسهای ضمیمه جدید
چنین چیزی میخواهم

amireto
چهارشنبه 22 دی 1389, 12:24 عصر
کسی پاسخس یا نظری نداره ؟
سوالم خیلی مشکل بود یا کسی حال پاسخ دادن نداره ؟:متعجب:
لطفاً کمک کنید !:گریه::ناراحت::افسرده:

amir-yeketaz
چهارشنبه 22 دی 1389, 14:32 عصر
بابا چرا ناراحت میشی !!! گفتم یه خورده خودت فکر کنی فسفر بسوزونی!!!

معمولا برای اینجور کارا از ایونت EditingControlShowing که ماله دیتاگریدویو هست استفاده میشه ... چون الان اون کنترل مورد نظر شما کمبوباکس هست پس نگاهی به کد زیر بنداز!


private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox cb = (ComboBox)e.Control;
cb.TextChanged += new EventHandler(cb_TextChanged);
}

خوب تو اون پارامتر ایونت یه چی هست به نام کنترل که کنترل موجود در سلول دیتاگریدویو رو برمیگردونه ... حالا تو میتونی این وسط این کنترل رو به اون چیزی که هست تبدیلش کنی و ادامه کار ...(من اینجا از ایونت TextChanged کمبوباکس استفاده کردم!)


void cb_TextChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
if (cb.Text.Length > 5)
{
MessageBox.Show("SO BAD!!!");

}
}

دیدی حالا زیادم سخت نیست!!! فقط یه کم بیشتر بهش ور برو تا همه چیش دست بیاد ...

موفق باشید ...

amireto
چهارشنبه 22 دی 1389, 19:43 عصر
دوست عزیز از پاسختون بسیار سپاسگذارم
اما
اگر دقت به کد من بکنید روش ما شبیه به هم است.
من هم از رویداد EditingControlShowing استفاده کردم .من حتی از کد شما هم استفاده کردم اما مشکل حل نشد
مشکل اینه که زمانی که متن داخل سلول تغییر میکنه عمل جستجو انجام بشه و همان لحظه در dropDownList نمایش بده
مشکل عدم نمایش در همان لحظه درون dropDownList است.

amir-yeketaz
چهارشنبه 22 دی 1389, 20:54 عصر
من این کارو قبلا کردم ... البته نه با کمبوباکس بلکه با تکست باکس ...

باید از خاصیت AutoComplete در کنترل هایی مثه تکست باکسو کمبوباکس استفاده کنی ...

این مثالو ببین :


public partial class Form1 : Form
{
AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
public Form1()
{
InitializeComponent();
coll.Add("ali");
coll.Add("said");
coll.Add("hosein");
coll.Add("asad");
coll.Add("amir");
//comboBox1.AutoCompleteCustomSource = coll;
//comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
//comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

}

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox txt = e.Control as TextBox;
txt.AutoCompleteMode = AutoCompleteMode.Suggest;
txt.AutoCompleteSource = AutoCompleteSource.CustomSource;
txt.AutoCompleteCustomSource = coll;

}
}

اگه بازم مشکلی هست خبر بده بینیم قضیه از چه قراره!!!

موفق باشید ...

amireto
پنج شنبه 23 دی 1389, 23:29 عصر
دوست عزیز بازم از پاسختون متشکرم
اما مشکل من پا برجاست. روش شما روش معمول استفاده از AutoCompleteSource که من هم استفاده کردم.
اما من یک جستجوی پویا میخوام درست کنم
بگذارید مشکلم رو بهتر توضیح بدم
اگر در کد اول من دقت کنید من میخواهم اطلاعات چندین جدول رو با هم جمع کنم و در لیست Combobox داخل گرید نمایش بدم.
من قبلا یک جدول واسط درست کردم این اطلاعات رو از چندین جدول جمع کردم و درون اون قراردادم و از همین روش شما استفاده کردم برای AutoCompleteSource ستون grid و این مشکلم رو تاحدودی حل کرد.
مشکل اول :
اما چون جداول دائم در حال تغییر هستند اطلاعات جدول واسط هم باید مدام به روز شوند برای همین تصمیم گرفتم به جای جدول واسط جستجو را درهمان لحظه بر اساس متن تایپ شده انجام بدم
مشکل دوم :
AutoCompleteSource ها یک مشکل دارند اونم اینه که با متنی که تایپ میکنی اون گزینه هایی از لیست رو نمایش می دهند که با متن تایپ شده شروع شده اند واین یه مشکل اساسی است من میخاهم یک جستجوی پویا داشته باشم که اگر کاربر کلمه ای تایپ کرد که اون کلمه در اول هیچ یک از گزینه های لیست نبود بلکه در وسط و یا اخر گزینه ای بود اون گزینه رو هم نشون بده و این روش رو بسط بدم برای کارهای پیشرفته تر
مثلا اگر چند کلمه وارد کرد هر کلمه رو به شکل جداگانه جستجو کند و در لیست نمایش دهد

و همه اینها ظاهراً مستلزم این هست که من در همون لحظه با تایپ هر حرف جستجو رو انجام بدم و dropDownList رو بر اساس این جستجو مرتب کنم و نمایش بدم
که تا به این لحظه موفق نشدم

اگر دیگر دوستان هم نظری دارند خوشحال میشیم نظرشون رو بدونیم

amireto
شنبه 25 دی 1389, 15:29 عصر
:کف::کف::کف::کف::کف::کف::کف:

هیچ کس نظری نداره !!!

:متعجب::متعجب::متعجب::متعجب:: تعجب::متعجب::متعجب:

javad_r_85
شنبه 25 دی 1389, 15:39 عصر
بابا این چه کاری از بایندیگ سورس استفاده کن خودت. راحت کن




bsUsers.DataSource = objUsers.Select();
dgvUsers.AutoGenerateColumns = false;
dgvUsers.DataSource = bsUsers;


string filter = "";
filter = "BID_FK='{0}'";
filter = string.Format(filter, txtSerch.Text);
this.bsUsers.Filter = filter;

amireto
چهارشنبه 29 دی 1389, 17:28 عصر
از پاسختون سپاسگذارم
اما gridView من بایند نشده فقط یک ستون اون که از نوع combobox است از دیتابیس برای گرفتن لیست استفاده میکنه
اگر از فیلتر هم استفاده کنیم باز هم همان مشکل هست یعنی زمانی که داری در این ستون تایپ میکنی بر اساس متنی که وارد میکنی در همان لحظه لیست رو فیلتر نمیکنه
من میخوام در همان لحظه که تایپ میکنیم dropDownList بر اساس متن وارده فیلتر بشه
autocomplete فقط بر اساس شروع کلمات فیلتر میکنه و نمایش میده
شاید بهتر باشه بگم من دنبال یک autoComplete سفارشی می گردم

mehdin69
چهارشنبه 29 دی 1389, 22:21 عصر
به نظرم اینو می خوای؟؟؟
این رو بطور ساده نوشتم که نام هایی که رو که توی دیتابیس هست رو نمایش بده... دیگه خودت هم یه کم فسفر بزن توش :دی:خجالت:


private void button1_Click(object sender, EventArgs e)
{
SqlConnection sqlconn = new SqlConnection("Data Source=FW6-3;Initial Catalog=Factory;Persist Security Info=True;User ID=sa;");
SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM tblEmployee", sqlconn);
DataTable dtEmployee = new DataTable();
sqlda.Fill(dtEmployee);
dataGridView1.DataSource = dtEmployee;

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
sqlda = new SqlDataAdapter("SELECT * FROM tblVehicle", sqlconn);
DataTable dtVehicle = new DataTable();
sqlda.Fill(dtVehicle);
col.DataSource = dtVehicle;
col.DisplayMember = "name";
col.ValueMember = "id";
dataGridView1.Columns.Add(col);
}

amireto
جمعه 01 بهمن 1389, 12:25 عصر
چنین چیزی میخوام
کسی میتونه راهنمایی کنه ؟!

amireto
شنبه 02 بهمن 1389, 20:25 عصر
کسی نظری نداره ؟

amireto
یک شنبه 03 بهمن 1389, 23:01 عصر
لطفا کمک کنید !!!!! :گریه::گریه::گریه::گریه::گریه: :گریه:
:گیج::گیج::گیج::کف::کف: نیاز زیادی بهش دارم :ناراحت::ناراحت::افسرده::افس ده:

amireto
چهارشنبه 06 بهمن 1389, 09:09 صبح
کسی چیزی نمی دونه ؟