PDA

View Full Version : سوال: نحوه ی جستجو براساس چند مشخصه



ahmad_lovely
سه شنبه 04 خرداد 1389, 13:01 عصر
سلام
من می خوام توی جستجو، این جوری باشه که چند تا تکست باکس نام، نام خانوادگی، سن، نام پدر
برای جستجو باشن و هروقت چهار تا تکست باکس باهم پر شدند، جستجو رو انجام بده و اگر هم کمتر از چهار تا تکست باکس پر شدند بازم جستجو براساس اون مشخصه انجام بده یعنی اگر یک تکست باکس خالی بود اون مشخصه رو دیگه جستجو نکنه !

کسی می تونه راهنمایی کنه ؟

با این کد میشه؟ :

x=table2BindingSource.Find("Name", TextboxName.text.trim);l


یا با کد فیلتر ؟ :

table2BindingSource.filter="Name Like '%"+ textboxName.text.trim() + "%'"; l


ممنون

spring69
سه شنبه 04 خرداد 1389, 16:57 عصر
سلام.
من بارها با يه همچين كدي اين كا رو كردم و به طور كامل مشكلم رو حل كرده:

string s = "select * from view_moamele2 where ";
if ((!string.IsNullOrEmpty(txtSerial.Text))) {
if (s.Contains("like")) s += " and ";
s += "[سریال معامله]like @serial";
}
if ((!string.IsNullOrEmpty(txtCarName.Text))) {
if (s.Contains("like")) s += " and ";
s += "[نام اتومبیل]like@carname";
}
if ((!string.IsNullOrEmpty(txtCarModel.Text))) {
if (s.Contains("like")) s += " and ";
s += "[مدل اتومبيل]like@model";
}
if ((s == "select * from view_moamele2 where ")) {
return;
}
ad.SelectCommand.Parameters.AddWithValue("@serial" , txtSerial.Text);
ad.SelectCommand.Parameters.AddWithValue("@carname ", txtCarName.Text);
ad.SelectCommand.Parameters.AddWithValue("@model", txtCarModel.Text);

csharpprogramer88
سه شنبه 04 خرداد 1389, 17:29 عصر
سلام.
من بارها با يه همچين كدي اين كا رو كردم و به طور كامل مشكلم رو حل كرده:

string s = "select * from view_moamele2 where ";
if ((!string.IsNullOrEmpty(txtSerial.Text))) {
if (s.Contains("like")) s += " and ";
s += "[سریال معامله]like @serial";
}
if ((!string.IsNullOrEmpty(txtCarName.Text))) {
if (s.Contains("like")) s += " and ";
s += "[نام اتومبیل]like@carname";
}
if ((!string.IsNullOrEmpty(txtCarModel.Text))) {
if (s.Contains("like")) s += " and ";
s += "[مدل اتومبيل]like@model";
}
if ((s == "select * from view_moamele2 where ")) {
return;
}
ad.SelectCommand.Parameters.AddWithValue("@serial", txtSerial.Text);
ad.SelectCommand.Parameters.AddWithValue("@carname", txtCarName.Text);
ad.SelectCommand.Parameters.AddWithValue("@model", txtCarModel.Text);

درسته دوت عزيز حل ميشه اما اگر تعداد فيلدها زياد باشه مثلا 20 يا 30 تا اون وقت چي يعني واقعا هيچ راه حل بهتري وجود نداره يعني بايد براي هر 30 مورد كد نوشت تازه اگر از 30 تا 10 تا پربودن هم بايد بررسي كنيم يا تعداد بيشتر يا كمتر .
اين سوال منم هست ولي راه حلي براش پيدا نكردم خواهشا اگر كسي ديگه اي نظر بهتري داره بگه

spring69
سه شنبه 04 خرداد 1389, 18:24 عصر
آره دوست عزيز اين مطلب كه شما فرمودين كامله درسته.
من خودم براي تعداد فيلدهاي زياد از كد پايين استفاده ميكنم.(خاصيت تگ textbox ها رو نام فيلدم ميزارم)

private void search()
{
string s = "select * from view_moamele where ";
foreach (TextBox txt in panel1.Controls.OfType<TextBox>()) {
if (!string.IsNullOrEmpty(txt.Text)) {
CheckStr(s);
s += txt.Tag.ToString + " like '%'+@" + txt.Name + "+'%'";
}
}
if (s == "select * from view_moamele where ") s = "select * from view_moamele";
BindDataGrid(s, dg);
}
private void CheckStr(ref string str)
{
if (str.Contains("like")) str += " and ";
}
private void BindDataGrid(string strconn, ref DataGridView dg)
{
SqlDataAdapter ad = new SqlDataAdapter(strconn, cnn);
DataTable dt = new DataTable();
foreach (TextBox txt in panel1.Controls.OfType<TextBox>()) {
if (!string.IsNullOrEmpty(txt.Text)) ad.SelectCommand.Parameters.AddWithValue("@" + txt.Name, txt.Text);
}
ad.Fill(dt);
dg.DataSource = dt;
if (dg.Rows.Count > 0) {
dg.CurrentCell = dg.Rows(0).Cells(14);
}
}

assari
سه شنبه 04 خرداد 1389, 19:59 عصر
سلام
من می خوام توی جستجو، این جوری باشه که چند تا تکست باکس نام، نام خانوادگی، سن، نام پدر
برای جستجو باشن و هروقت چهار تا تکست باکس باهم پر شدند، جستجو رو انجام بده و اگر هم کمتر از چهار تا تکست باکس پر شدند بازم جستجو براساس اون مشخصه انجام بده یعنی اگر یک تکست باکس خالی بود اون مشخصه رو دیگه جستجو نکنه !

کسی می تونه راهنمایی کنه ؟

با این کد میشه؟ :

x=table2BindingSource.Find("Name", TextboxName.text.trim);l



یا با کد فیلتر ؟ :




table2BindingSource.filter="Name Like '%"+ textboxName.text.trim() + "%'"; l








ممنون













سلام دوست عزیز
به نظر من استفاده از همون bindingSource.filter روش ساده تریه.
اگه تمام فیلدها String باشند نیازی به چک کردن محتوای TextBox ها نیست. کافیه به این صورت نوشته شود:




bindingSource.Filter = "Name LIKE '%"+txtName.Text+"%' AND Family LIKE '%"+txtFamily.Text+"%' AND ...";l


و در صورت وجود فیلدهای غیر String کد مربوطه، به همراه بررسی پر یا خالی بودن TextBox موردنظر به این کد اضافه گردد.

spring69
سه شنبه 04 خرداد 1389, 22:31 عصر
سلام دوست عزیز
به نظر من استفاده از همون bindingSource.filter روش ساده تریه.
اگه تمام فیلدها String باشند نیازی به چک کردن محتوای TextBox ها نیست. کافیه به این صورت نوشته شود:




bindingSource.Filter = "Name LIKE '%"+txtName.Text+"%' AND Family LIKE '%"+txtFamily.Text+"%' AND ...";l


و در صورت وجود فیلدهای غیر String کد مربوطه، به همراه بررسی پر یا خالی بودن TextBox موردنظر به این کد اضافه گردد.

درسته براي عملگر like كاملا جواب ميده ولي براي "="نه.