我有我的代碼運行完全正常,但它看起來很討厭。其目的是從我的數據庫中搜索和顯示符合搜索條件的工作人員。我的表格上填寫了一個DataGridView
,填寫了我的數據庫中的工人數據。我按Search
按鈕後,我只想顯示符合TextBoxes/ComboBoxes
標準的工作人員列表。如果它們是空的,它會再次顯示完整列表。在形式
搜索功能:
代碼:
與代碼private void btnSearch_Click(object sender, EventArgs e)
{
FillList();
List<Worker> list = new List<Worker>();
bool match = false;
foreach (var worker in workerBindingSource)
{
if (txtName.Text.Length > 0 && !((Worker)worker).Name.ToLowerInvariant().Contains(txtName.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (txtLastName.Text.Length > 0 && !((Worker)worker).LastName.ToLowerInvariant().Contains(txtLastName.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (txtOIB.Text.Length > 0 && !((Worker)worker).OIB.ToLowerInvariant().Contains(txtOIB.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (txtLocation.Text.Length > 0 && !((Worker)worker).Location.ToLowerInvariant().Contains(txtLocation.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (txtAddress.Text.Length > 0 && !((Worker)worker).Address.ToLowerInvariant().Contains(txtAddress.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (txtPhoneNumber.Text.Length > 0 && !((Worker)worker).PhoneNumber.ToLowerInvariant().Contains(txtPhoneNumber.Text.ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (!cboProfessionalQualification.SelectedValue.ToString().Equals("Empty") && !((Worker)worker).ProfessionalQualification.ToString().ToLowerInvariant().Contains(cboProfessionalQualification.SelectedValue.ToString().ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (!cboDegree.SelectedValue.ToString().Equals("Empty") && !((Worker)worker).Degree.ToString().ToLowerInvariant().Equals(cboDegree.SelectedValue.ToString().ToLowerInvariant()))
{
match = false;
continue;
}
else
match = true;
if (match)
{
list.Add(WorkerDAO.ReadWorker(((Worker)worker).ID));
}
}
SortableBindingList<Worker> sortableList = new SortableBindingList<Worker>(list);
workerBindingSource.DataSource = sortableList;
}
一切名爲 「txt」 的前綴是TextBox
以及帶「cbo」前綴的所有內容均爲ComboBox
。 ComboBoxes
包含用戶可以選擇的某些枚舉。如果ComboBox
顯示枚舉值「Empty」這意味着用戶沒有選擇任何內容(與字符串的零長度值相同)。 SortableBindingList
僅用於列標題點擊的排序目的,在這種情況下不重要。 ReadWorker
方法只有在匹配所有搜索值時才返回工作人員,然後將其添加到列表中,然後將其顯示在DataGridView
之後。 FillList
方法將數據庫的工作人員的整個列表設置爲DataBindingSource
。
ReadWorker方法:
public static Worker ReadWorker(int workerID)
{
var worker = ReadEverything().Where(x => x.ID == workerID).FirstOrDefault();
return worker;
}
方法ReadEverything
從數據庫返回所有工人的名單。
我正在尋找一種LINQ解決方案(或任何其他更好的解決方案)以大幅度降低我的代碼並使其更具可讀性,但是由於我對編程和LINQ仍然很新穎,我無法自己弄清楚。所以我想知道你們是否可以幫助我,或者至少讓我指向正確的方向。
在此先感謝!
'ReadEverything'是否將數據庫命名爲'Select * from table'?爲什麼不使用'select * from table where id = workerid'? –
*'workerBindingSource'的*類型是什麼?它實際上是一個'System.Windows.Forms.BindingSource'嗎? –
如果它是綁定源,你可以使用'BindingSoure.Filter'屬性過濾列表 –