الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Dynamic Search

بدأه حسام المقحم في 3 نوفمبر 2008 · 6 رد · 1,172 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساء المطر للجميع

اتمنى تكونون بأتم صحة وعافية

لدي تساؤل وارجوا الاجابة عليه ممن سبق لهم ان واجهوا مثل هذا الترك

انا عندي صفحة فيها اكثر من filed منها textbox و dropdownlist ابغى اسوي محرك بحث بشكل dynamic يعني اللي ما ادخل فيه قيم يتجاهله في الكويري واللي تم ملئه من قبل المستخدم يأخذ في الحسبان

ارجوا المساعدة واللي عنده اي refrence ممكن يفيدني يزودني به بليز

#2

اخى الكريم جملة sql هى جملة نصية تقدر تزود عليها

يعنى تقدرتعمل جملة sql مثلاُ

sql

وتعمل عدة جملة if تختبر مثلاُ textbox لو كان المستخدم ادخل فيه قيمة معناه عاوز يبحث بيه تقوم تضيف شرط البحث على جملة sql

sql = sql + new Where

وبعدين تختبر الحقل اللى بعده وتعمل if لو كان المستخدم ادخل قيمة تجيب جملة sql وتضيف عليها الشرط

ان شاء الله تكون الأجابه واضحة

تم تعديل هذه المشاركة بواسطة almny.com في 4 نوفمبر 2008 في 01:47

سجل معنا فى النشرة البرمجية الأسبوعية علمني دوت كوم www.almny.com

#3

الموضوع سيتم عبر كثير من الجمل الشرطية if - else .. بحيث تشيك على الخانات المملوءة والأخرى الفارغة

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#4

موضوع مهم :

واجهتني هذه المشكلة في احد برامجي و هي البحث المتقدم في مكتبة الكترونية بالاعتماد على عدة حقول بحيث يهمل الحقل الذي ليس به قيمة من شرط جملة الاستعلام...

و هي تحتاج الى الكثير من العمليات الشرطية و الاحتمالات.

مثلا لو كان لديك مربعي نص txt_1 و txt_2 فعليك كتابة 2*2 = 4 جملة شرطية ..

و تخيل مثلا لو كان لديك في فورم البحث 20 مربع نص و 4 قوائم انزلاقية مثلا و غيرها من خيارات البحث , عندئذ ستحتاج الى مئات الجمل الشرطية للخروج بجملة الاستعلام sql و ما يرافقها من خربطة وو جع راس.

الحل يكمن في عمل ميثود لكل حقل من حقول البحث في الفورم (أدوات ASP.NET) , بحيث يعيد الميثود الخاص بكل كونترول احدى قيمتين : اما القيمة المخزنة في الكونترول أو لاشيء("") , وهذا مثال للتوضيح :

تخيل معي ان فورم البحث يحتوي على DropDownList باسم DDL و 3 مربعات نص باسم TXT_1 & TXT_2 & TXT_3 .

طبعا نحن نريد جملة SQL واحدة من كل هذه العملية ..

كود زر البحث :


{
string Str_SQL = "";
Str_SQL = "SELECT somethings FROM somwhere " + GettWhere() + GettTXT_1() + GettTXT_2() + GettTXT_3() + GettDDL();
//
// --- اتصل بقاعدة البيانات بالاعتماد على جملة السكيوال المولدة اعلاه و افعل ما يحلو لك
//
Response.Write(Str_SQL); //---لمشاهدة جملة الاستعلام المولدة
}
		   protected void Button1_Click(object sender, EventArgs e)

فنكشن جلب قيمة الحقل الاول .... كل اداة في فورم البحث سيحتاج له ميثود خاص به..:


string GettTXT_2()
{
if (!(TXT_2.Text==""))
{
if (TXT_1.Text == "") { return " related to TXT_2 database field =" + TXT_2.Text; }
else { return " AND related to TXT_2 database field =" + TXT_2.Text; } // AND/OR Whatever u like...
}
else
{ return ""; }
}
		//------------------- قيمة TXT_2 ----------------------


string GettTXT_3()
{
if (!(TXT_3.Text == ""))
{
if ((TXT_1.Text == "") & (TXT_2.Text == "")) { return " related_to_TXT_3_database_field =" + TXT_2.Text; }
else { return " AND related_to_TXT_3_database_field =" + TXT_3.Text; }
}
else
{ return ""; }
}
		//------------------- قيمة TXT_3 ----------------------


{
if (!(DDL.SelectedIndex == 0)) // غير الشرط حسب منطق كودك
{
if ((TXT_1.Text == "") & (TXT_2.Text == "")) { return " related_to_DDL_database_field =" + DDL.SelectedItem.Value; }
else { return " AND related_to_DDL_database_field =" + DDL.SelectedItem.Value; }
}
else
{ return ""; }
}
		  string GettDDL()


{
if ((TXT_1.Text == "") & (TXT_2.Text == "") & (TXT_3.Text == "") & (DDL.SelectedIndex == 0))
{ return ""; }
else
{ return " where "; }
}
			string GettWhere()

طبق الكود اعلاه ولاحظ النتيجة .... و غير ما تشاء حسب تطبيقك .... أرجو الاستفادة للجميع.

بالتوفيق.

#5

السلام عليكــم ورحمـة الله وبركاتــة

اخواني الاعزاء ، أعجبني الموضوع ولذلك ساطرح عليك محاولتي أخي حسام

لقد قمت بتصميم قاعدة بيانات للتجربة واسميتها Users فقط بهدف التجربة

واضفت جدولا واحدا اسمه Users ايضا واضفت له ثلاثة حقول هي

UserNumber

UserName

UserAge

UserCountry

واضفت عليه بعض البيانات

وفي الصفحة قمت بوضع ثلاثة مربعات نصوص وDropDownList واحدة لأجل Country

ثم استخدمت AJAX Update Panel ووضعت فيها العناصر الاربعة السابقة

ثم اضفت GridView وربطه مع قاعدة البيانات

واضفت زر لعمل البحث

ألية البحث:

في حدث Page_Load وضعت الكود التالي

If Not IsPostBack Then

Session.Add("CR", "")

End If

لكي اقوم ببدء قيمة داخل الSession اسميتها CR ستحتفظ بنص البحث

ثم قمت بإضافة اجراء الى الصفحة بالشكل التالي

Public Sub AddtoCrtiria(ByVal Name As String, ByVal value As String)

Session("CR") = Session("CR") & Name & "='" & value & "' AND "

End Sub

حيث يقوم بالتعديل على نص البحث المخزن في Session

الان في كل مربع نص في حدث Changed وضعت الكود التالي

If TextBox1.Text <> "" Then

AddtoCrtiria("UserName", TextBox1.Text)

End If

طبعا Textbox1 يرسل UserName و TextBox2 يرسل UserNumber وهكذا

في الزر الخاص بعملية البحث أضفت الكود التالي

Dim mystring As String

mystring = Session("CR")

mystring = Left$(mystring, Len(mystring) - 4)

SqlDataSource1.FilterExpression = mystring

MsgBox(mystring) ''فقط بغرض التوضيح للمبرمج

Session("CR") = ""

وكما تلاحظ قمت بحذف الحروف الاربعة الاخيرة ليتم حذف اخر كلمة AND من جملة البحث

قمت بارفاق السايت اذا احببتم التجربة

ولكم مني كل الاحترام والتقدير

WebSite1.rar

#6

في البداية اشكر الجميع على تفاعله وتقديم خيوط فعاله لحل المشكلة

سأعرض عليكم ما قمت به للفائدة

protected void Dynamic_search(object sender, EventArgs e)

{

String select = "SELECT * FROM [Table] where ";

String condition = "";

if (a.SelectedIndex !=0 )

{

Label2.Text = "[a]=" + a.SelectedValue + "and";

}

if (b.Text != "")

{

Label2.Text = Label2.Text + "=" + b.Text + "and";

}

if (c.SelectedIndex != 0)

{

Label2.Text = Label2.Text + "[c]='" + c.Text + "'and";

}

if (d.SelectedIndex != 0)

{

Label2.Text = Label2.Text + "[d]='" + d.SelectedValue + "'and";

}

if (e.SelectedIndex != 0)

{

Label2.Text = Label2.Text + "[e]='" + e.SelectedValue + "'and";

}

if (f.SelectedIndex != 0)

{

Label2.Text = Label2.Text + "[f]='" + f.SelectedValue + "'and";

}

if (g.SelectedIndex != 0)

{

Label2.Text = Label2.Text + "[g]='" + g.SelectedValue + "'and";

}

if (h.Text != "0")

{

Label2.Text = Label2.Text + "[h]=" + h.Text + "and";

}

String sql = select.ToString() + Label2.Text;

int length = sql.Length ;

String SqlQurey = sql.Remove(length - 3, 3); // to remove the AND word

تم تعديل هذه المشاركة بواسطة حسام المقحم في 9 نوفمبر 2008 في 09:10

#7

السلام عليكــم ورحمـة الله وبركاتــة

شوف هذا الموقع يحتوي على مثال نفس الفكره التي تريد هنا

abdullahf4.jpg

مواضيع مشابهة