PDA

View Full Version : سوال: بهترين روش جستجوي تركيبي؟



sajadjamalian
سه شنبه 09 شهریور 1389, 17:10 عصر
سلام دوستان :
من يه فرم جستجو دارم كه توي اون چندتا textbox و چندتا combobox و ... دارم حالا ميخوام توي اين فرم يه جستجوي تركيبي داشته باشم، بهترين راه براي نوشتن چنين كدي چيه؟
(اطلاعات در يك بانك sql ذخيره شده)

cheshm6k
سه شنبه 09 شهریور 1389, 19:46 عصر
سلام دوستان :
من يه فرم جستجو دارم كه توي اون چندتا textbox و چندتا combobox و ... دارم حالا ميخوام توي اين فرم يه جستجوي تركيبي داشته باشم، بهترين راه براي نوشتن چنين كدي چيه؟
(اطلاعات در يك بانك sql ذخيره شده)

اگه منظورت از جستجوی ترکیبی ، دستور SQLش باشه که خوب یا And , OR و... میتونی انجام بدی. اگه نه باید خواسته کاربرتو در نظر بگیری . ببینی اون در لحظه میخواد بر اساس یک فیلد یا اینکه همه فیلدها جستجو کنه . یا میتونی یه چک باکس واسش بذاری که اگه میخواد همه فیلدها رو تیک بزنه.
نظر من اینه که تو TextChange تکست باکس هات یا SelectedIndexChange کامبوهات جستجوت بر اساس همه فیلدها باشه . البته با عملگر like نه مساوی. البته این نوع جستجو نیازمند اینه که کاربر اطلاعاتو تو یه گرید یا فرم گزارشت ببینه و نسبت به جوابا جستجوشو محدودتر کنه تا برسه به اون چیزی که میخواد .

Rejnev
سه شنبه 09 شهریور 1389, 20:16 عصر
--sqlExample
create Proc mySearchProc @code int ,@name nvarchar ,... as
begin
select * from myTable
where
(@code is null or @code=fieldCode) and (@name is null or @name=fieldName) and...
end


موقع فراخونی در سی شارپ هر کدوم از پارامها رو که دوست داشتی مقدار میدی
مثلا:


string q="Exec MySearchProc 1,null,default,null,'ali',....";


مثال سی شارپی:


string q="1=1 ";
if(txtName.Text!="")
q+=" and name like '"+txtName.Text+"'";
if(chkByDate.Checked)
q+=" and birthdate='"+txtDate.Text+"'";
if....
//then use q as filter in datatable.defaultview.rowfilter.

میلاد قاضی پور
سه شنبه 09 شهریور 1389, 21:27 عصر
من این تابع رو توی دیتا اکسس لایرم نوشتم که همون کار رو انجام میده .



///
/// <summary>
/// تابع پر کننده گرید ویو با ستونهای فیلتر چندگانه
/// </summary>
/// <param name="comm">دستور سلکت کردن اطلاعات</param>
/// <param name="dg"> گریدویو مورد نظر جهت پر شدن با دستور سلکت</param>
/// <param name="filtercolumn">فیلدهایی که قرار است کاربر بر اساس آن اطلاعات را جستجو کند</param>
/// <param name="searchtextboxtext">کنترل ها یا متنهایی که کاربر جهت سرچ کردن اطلاعات مورد نظرش
/// وارد میکند. معمولا پراپرتی تکست تکس باکس است</param>
public void bindGridview(string comm, DataGridView dg, string filtercolumn1,
string filtercolumn2, string filtercolumn3, string searchtextboxtext,string searchtextboxtext2
,string searchtextboxtext3)
{
BindingSource bs = new BindingSource();
dg.AutoGenerateColumns = true;
bs.DataSource = mydatatable(comm);

/*در دستورات زیر بررسی میکنیم که در صورت خالی بودن هرکدام از پارامتر ها یعنی خالی ماندن
* کنترل های جستجو توسط کاربر عمل فیلتر با کدام دستور انجام شود*/

string flt = "";

if (filtercolumn1 != "")
flt=string.Format(filtercolumn1 + " like '{0}%'", searchtextboxtext);

if ((filtercolumn1!="")&&(filtercolumn2 != ""))
{
flt +=string.Format(" and " + filtercolumn2 + " like '{0}%'" , searchtextboxtext2 );
}
else if((filtercolumn2 != ""))
{
flt += string.Format(" and " + filtercolumn2 + " like '{0}%'", searchtextboxtext2);
}

if ((filtercolumn1!="")&&(filtercolumn3 != ""))
flt += string.Format(" and " + filtercolumn3 + " like '{0}%'", searchtextboxtext3);
else if((filtercolumn3 != ""))
{
flt += string.Format(" and " + filtercolumn3 + " like '{0}%'", searchtextboxtext3);
}

bs.Filter = flt;


dg.DataSource = bs;
dg.EditMode = DataGridViewEditMode.EditOnEnter;
}


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