1

学生の詳細(名、姓、性別、学位、および燃焼日)を含むデータグリッドビューがあります

「キーボード検索」を実行するために次のコードを記述します (この例では、データをローカルに「ロード」します)。

    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>

多分誰かが提案する良い検索アルゴリズムを持っていますか?

ありがとうございました

4

2 に答える 2

0

まず、時間がかかるものを測定する必要があります。それは検索自体ですか(私は疑います)、それともキーストロークごとにデータグリッドを更新していますか?

于 2013-08-28T12:51:20.280 に答える