PDA

View Full Version : حرفه ای: جست و جوی چند گانه



sajad_boj70
جمعه 03 خرداد 1392, 12:37 عصر
سلام دوستان.
من میخوام یک فرم جست و جو مثل جست و جویی که تو این سایت (http://amlak584.ir/)وجود داره تو سایتم بزارم(فرقی نمیکنه با sql باشه یا linq to Entities یا هر چیز دیگه) .که عمل جست و جو رو بین چند فیلد انجام میده.
لطفا راهنماییم کنید./

ali9698
جمعه 03 خرداد 1392, 14:41 عصر
من قبلا این کار رو انجام دادم. برای این کار باید هنگامی که روی دکمه جستجو کلیک میشه کد sql رو با توجه به فیلترهای اعمال شده بسازید. قسمت اول از کد sql ثابت است اما قسمت where رو باید با توجه به فیلترها تولید کنید.
اینم مثال ساده

protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(.........);
SqlCommand cmd = new SqlCommand("", con);
string a = "select * from table1 where";
if (txt_name.Text != "")
{
cmd.Parameters.AddWithValue("@name", txt_name.Text);
a += " name=@name";
}
if (txt_price.Text != "")
{
cmd.Parameters.AddWithValue("@price", txt_price.Text);
a += " price=@price";
}
cmd.CommandText = a;
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
con.Close();
}

forestasphalt
جمعه 03 خرداد 1392, 15:44 عصر
شما باید فیلدهای استان و شهر و.... از دیتابیس بخونی(همش در یه ریپیتر قرارمیگیره) و بعد با یه if بررسی میکنی که آیا اون فیلد مقداری ازش انتخاب شده یا نه اگه انتخاب شده بود اون مقدار رو به sql اضافه کن
موفق باشید

sajad_boj70
جمعه 03 خرداد 1392, 19:23 عصر
شما باید فیلدهای استان و شهر و.... از دیتابیس بخونی(همش در یه ریپیتر قرارمیگیره) و بعد با یه if بررسی میکنی که آیا اون فیلد مقداری ازش انتخاب شده یا نه اگه انتخاب شده بود اون مقدار رو به sql اضافه کن
موفق باشید
ممنون میشه با کد توضیح بدید

farzane_t
شنبه 04 خرداد 1392, 17:49 عصر
سلام
باید همون کاری رو انجام بدید که در پست 2 هم تقریبا گفته شده. مثلا طبق عکسی که گذاشتم فرض کنید قراره جستجویی بر اساس عنوان کتاب و/یا نام نویسنده و... انجام بشه . به تناسب اینکه چی انتخاب میشه رشته ای که برای جستجو قراره استفاده بشه ساخته میشه :



string sqlselect1 = null;
string sqlselect2=null;
string selectAndOr = null;
string endselect = null;

switch (drpindex1.SelectedIndex)
{
case 0:
sqlselect1 = "Title Like N'%'+@select1+'%'";
break;
case 1:
sqlselect1 = "Author Like N'%'+@select1+'%'";
break;
case 2 :
sqlselect1 = "Subject Like N'%'+@select1+'%'";
break;
}

switch (drpindex2.SelectedIndex)
{
case 0:
sqlselect2 = "Title Like N'%'+@select2+'%'";
break;
case 1:
sqlselect2 = "Author Like N'%'+@select2+'%'";
break;
case 2:
sqlselect2 = "Subject Like N'%'+@select2+'%'";
break;
}

switch (drpAndOr.SelectedIndex)
{
case 0:
selectAndOr = "AND";
break;
case 1:
selectAndOr = "OR";

break;
}

switch (drplanguage.SelectedIndex)
{
case 0:
endselect = "SELECT ISBNNumber , [Title], [Subject], [Author], [Publisher], [Translator], [Language] FROM [EBooks] WHERE ((" + sqlselect1 + ") " + selectAndOr + " (" + sqlselect2 + "))";
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
endselect = "SELECT ISBNNumber , [Title], [Subject], [Author], [Publisher], [Translator], [Language] FROM [EBooks] WHERE ((" + sqlselect1 + ") " + selectAndOr + " (" + sqlselect2 + ") AND (Language Like N'%'+@Language+'%'))";
break;
}



SqlConnection Con = new SqlConnection(myConnectionString.ConnectionString) ;
SqlCommand Cmd = new SqlCommand(endselect, Con);
Cmd.Parameters.AddWithValue("@select1", txtsearch1.Text);
Cmd.Parameters.AddWithValue("@select2", txtsearch2.Text);
Cmd.Parameters.AddWithValue("@Language", drplanguage.SelectedValue);
Con.Open();

Grv_Search.DataSource = Cmd.ExecuteReader();
Grv_Search.DataBind();
Con.Close();
int i = Grv_Search.Rows.Count;
lblmessage.Text = "تعداد يافته ها" + " : " + i.ToString();

Behnam6670
شنبه 04 خرداد 1392, 19:09 عصر
سلام جستجوی ترکیبی تو LINQ به صورته زیره

var SearchQuery=from p in db.tbl1 select p;

این یه کوری هستش که اگه کاربر هیچ یک از فیلدای جستجو رو پر نکرد یه مقدار اولیه از همه فیلدای جدولtbl1 رو برمیگردونه
به فرض مثال شما دوتا فیلد داری به نام های نام استان و نام شهر که میخوای تو جستجو لحاظ کنی باید تو دکمه جشتجو اول کد بالارو بنویسی و زیرش برای استان و شهر و یا هر تعداد فیلد که داشته باشی کد مشابه زیر رو بنویسی

if(txtOstan.Text!=String.Empty)
{
SearchQuery=SearchQuery.where(c=>c.OstanName==txtOstan.Text;)
{

forestasphalt
یک شنبه 05 خرداد 1392, 09:58 صبح
به نظرم اینکار رو کنی بهتره

<asp:repeater id="repeater1" runat="server">
<ItemTemplate>
<asp:DropDownList id="DrpContent" runat="server"></asp:DropDownList>
<asp:Label ID="LblTitle" runat="server" Text='<%# Eval("title") %>'></asp:Label>
</ItemTemplate>
</asp:repeater>
protected void Search_Result(object sender, EventArgs e)
{

foreach (RepeaterItem item in repeater1.Items)
{
string sql = "";
DropDownList drp = (DropDownList)item.FindControl("DrpContent");
Label lbl = (Label)item.FindControl("LblTitle");
if (drp.SelectedItem.Text != "")
{
sql += "'" + lbl.Text + "' ='" + drp.SelectedItem.Text + "' +&+";

}

}


}





البته باید روش کمی کار کنی تا جوابه مطلوبتو بده
روش کار اینجوریه که ما تمام عنوان ها که شامل شهر استان متراز و... از یه جدول میخونیم تو میتونی از چند جدول بخونی
بعد میایم برسی میکنیم که آیا dropdiwn مربوط به اون فیلد انتخاب شده یا نه
اگر انتخاب شده بود اونو به کوئری خودمون اضافه میکنیم
با این روش دیگه نیازی نیست if های مختلفی رو بنویسیم