学生の詳細(名、姓、性別、学位、および燃焼日)を含むデータグリッドビューがあります
「キーボード検索」を実行するために次のコードを記述します (この例では、データをローカルに「ロード」します)。
public class StudentDetails
{
public string firstName;
public string lastName;
public string gender;
public string degree;
public DateTime burnDate;
};
public List<StudentDetails> studentSearchList = new List<StudentDetails>(); // Contain all dgv for searches
private void Form1_Load(object sender, EventArgs e)
{
refreshDataGridView();
}
private void refreshDataGridView()
{
for (int i = 0; i < 1000; i++)
{
StudentDetails sd = new StudentDetails();
sd.firstName = GetRandomFirstName();
sd.lastName = GetRandomLastName();
sd.gender = GetRandomGender();
sd.degree = GetRandomDegree();
sd.burnDate = GetRandomBurnDate();
studentSearchList.Add(sd);
addRowToDataGrid(sd);
}
}
bool detailsContain(StudentDetails sd, string s)
{
if (sd.firstName.ToLower().Contains(s) ||
sd.lastName.ToLower().Contains(s) ||
sd.gender.ToLower().Contains(s) ||
sd.degree.ToLower().Contains(s) ||
sd.burnDate.ToShortDateString().ToString().Contains(s))
return true;
else
return false;
}
void addRowToDataGrid(StudentDetails sd)
{
string[] row = new string[] { sd.firstName, sd.lastName, sd.gender, sd.degree, sd.burnDate.ToShortDateString().ToString() };
dataGridView1.Rows.Add(row);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
List<StudentDetails> list_SD = new List<StudentDetails>();
String s = textBox1.Text;
s = s.ToLower().Trim();
foreach (StudentDetails sd in studentSearchList)
if (detailsContain(sd, s)) list_SD.Add(sd);
// Clear old rows
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
// Adding the new rows
foreach (StudentDetails sd in list_SD)
addRowToDataGrid(sd);
}
私の問題は、検索が遅すぎて、速度を改善する方法がわかりません。すべてのデータベースを含む別のリストを宣言し、ユーザーが削除文字を押すまで最後の検索結果だけを StudentSearchList に入力しようとしましたが、あまり役に立たず、メモリを消費します…</p>
多分誰かが提案する良い検索アルゴリズムを持っていますか?
ありがとうございました