כתבתי חלון לחיפוש תורמים ותרומות
זה החלון:

כתבתי מחלקה אבסטרקטית עם פונקציות לחיפוש:
public abstract class SearchDonor
{
public static IEnumerable<Donor> SearchName(string name)
{
var result = from donor in AddTorem.donors
where donor.FirstName == name || donor.LastName == name
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchID(string id)
{
var result = from donor in AddTorem.donors
where donor.Id ==int.Parse(id)
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchAddress(string address)
{
var result = from donor in AddTorem.donors
where donor.Adress == address
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchTelefon(string telefon)
{
var result = from donor in AddTorem.donors
where donor.Tel == telefon
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchEmail(string email)
{
var result = from donor in AddTorem.donors
where donor.Email == email
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchGenderMale()
{
var result = from donor in AddTorem.donors
where donor.Gender == Gender.male
select donor;
return (IEnumerable<Donor>)result;
}
public static IEnumerable<Donor> SearchGenderFemale()
{
var result = from donor in AddTorem.donors
where donor.Gender == Gender.female
select donor;
return (IEnumerable<Donor>)result;
}
}
והקוד שמופעל כשלוחצים על הלחצן "חפש" בחיפוש לפי נתוני התורם הוא:
private void SearchDonor_Click(object sender, RoutedEventArgs e)
{
try
{
IEnumerable<Donor> result;
//if all is empty
string textSearch = nameSearch.Text + idsearch.Text + addressSearch.Text + telSearch.Text + emailSearch.Text;
if (((string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false && genderFeamleSearch.IsChecked == false))
|| (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == true && genderFeamleSearch.IsChecked == true))
throw new Exception("Eror!! Insert a value in the textbox.");
//אם נבחרה רק תיבת הסימון של "זכר"
else if (string.IsNullOrEmpty(textSearch) && genderFeamleSearch.IsChecked == false)
{
result = SearchDonor.SearchGenderMale();
viewSerchGridDonors.ItemsSource = result;
}
//כנ"ל של "נקבה"
else if (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false)
{
result = SearchDonor.SearchGenderFemale();
viewSerchGridDonors.ItemsSource = result;
}
// אם הוא מחפש רק את המספר סידורי
textSearch = nameSearch.Text + addressSearch.Text + telSearch.Text + emailSearch.Text;
if (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false && genderFeamleSearch.IsChecked == false)
{
result = SearchDonor.SearchID(idsearch.Text);
viewSerchGridDonors.ItemsSource = result;
}
//אם הוא מחפש רק את השם
textSearch = idsearch.Text + addressSearch.Text + telSearch.Text + emailSearch.Text;
if (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false && genderFeamleSearch.IsChecked == false)
{
result = SearchDonor.SearchName(nameSearch.Text);
viewSerchGridDonors.ItemsSource = result;
}
// if search only the address
textSearch = nameSearch.Text + idsearch.Text + telSearch.Text + emailSearch.Text;
if (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false && genderFeamleSearch.IsChecked == false)
{
result = SearchDonor.SearchAddress(addressSearch.Text);
viewSerchGridDonors.ItemsSource = result;
}
//search telefon
textSearch = nameSearch.Text + idsearch.Text + addressSearch.Text + emailSearch.Text;
if (string.IsNullOrEmpty(textSearch) && genderMaleSearch.IsChecked == false && genderFeamleSearch.IsChecked == false)
{
result = SearchDonor.SearchTelefon(telSearch.Text);
viewSerchGridDonors.ItemsSource = result;
}
//search email
textSearch = nameSearch.Text + idsearch.Text + addressSearch.Text + telSearch.Text;
if (string.IsNullOrEmpty(textSearch) && genderFeamleSearch.IsChecked == false && genderMaleSearch.IsChecked == false)
{
result = SearchDonor.SearchEmail(emailSearch.Text);
viewSerchGridDonors.ItemsSource = result;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
כמובן שזה רק ההתחלה.. כיון שצריך להוסיף מה קורה כאשר הוא מזין 2 פרמטרים (שם +כתובת וכדו'), ומה כשהוא מזין ב3 וכן על זה הדרך.
כמובן שזה ארוך כאורך הגלות לכתוב את כל האפשרויות שיכולות להיות (ועוד כל מה שכתבתי זה רק לגבי חיפוש לפי נתוני התורם, וצריך עוד לכתוב לגבי חיפוש לפי נתוני התרומה וכדו').
לכן שאלתי היא האם אפשר לכתוב מתודה גנרית שתדע לזהות מה אני מחפש ולפי זה לבחור היכן לחפש.. למשל לכל טקטסבוקס יש שם ע"פ הפרמטר שהוא אמור לקבל, האם אפשר שהמתודה תזהה לפי השם של הטקסטבוקס שנשלח אליה באיזה מאפיין מדובר (טלפון/כתובת/שם וכדו') וע"פ זה תדע לחפש במאפיין הנ"ל?
כמו"כ האם יש איזושהי דרך יותר פשוטה לכתוב את פונקציות החיפוש?
ניסיתי לכתוב בהתחלה את כל הפרמטרים יחד, אבל במקרה כזה אם הוא מכניס רק פרמטר אחד זה לא ייתן שום תוצאה.
לדוגמ' בקוד הבא:
IEnumerable<Donor> result;
result = from donor in AddTorem.donors
where donor.Id == int.Parse(idsearch.Text) && (donor.FirstName == nameSearch.Text || donor.LastName == nameSearch.Text)
&& donor.Adress == addressSearch.Text
select donor;
צריך להזין גם ID וגם שם וכתובת כדי לקבל תוצאה, ואם אחד מהם ריק הוא כותב לי "מחרוזת קלט לא הייתה בתבנית הנכונה"..
אשמח לשמוע עיצות ותובנות :lol: :lol:
תודה רבה רבה!!
פורסם במקור בפורום CODE613 ב09/08/2015 01:25 (+03:00)