2017-05-15 3 views
1

テキストボックスのテキストを含むリスト内の文字列を検索しようとしています。レコードが見つかると、それをフローレイアウトパネルに追加します。それは正しく動作していないようです。c#テキストボックステキストを含むリストから文字列を検索する

  • リチャード・ジェイコブス
  • すべての従業員がにEmployeeListに追加され

オリビアMularczyk

  • ジェスMularczyk:

    は、私は3人の従業員を持っています。

    GUI

    私は、テキストボックスに「R」を入力すると、唯一のリチャードは良いですどの現れます!しかし、「Ri」と​​入力すると表示されません。また、「O」や「Olivia」と入力すると、従業員はどちらも表示されません!

    コード:

    if (EmployeeTb.Text != string.Empty) 
    { 
        ResultsFLP.Controls.Clear(); 
    
        foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList) 
        { 
         if (Employee.firstName.Contains(EmployeeTb.Text)) 
         { 
          ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName); 
          ResultsFLP.Controls.Add(ESR); 
         } 
        } 
    } 
    else 
    { 
        ResultsFLP.Controls.Clear(); 
    
        foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList) 
        { 
         ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName); 
         ResultsFLP.Controls.Add(ESR); 
        } 
    } 
    

    私は君たちを助けることを願って! :D

  • +0

    私はなぜそれが機能しないのかの方法で追加する必要はありません。私はちょうどあなたが本当にそのことを理解するためにそれを見て、あなたのロジックをもう一度見なければならないかもしれないことを指摘したいと思います。あなたは多くの冗長性があることがわかります... – maccettura

    +0

    私は何度も見てきましたが、なぜそれがなぜtbhではないのか分かりません。とにかくありがとう! :D –

    +2

    それは動作していませんが、あなたのロジックはちょっとおさまらず、潜在的な単純なバグのためにオープンしました(投稿したコードが何も省略していないと仮定します)。これを確認してください[コードシェア](https://codeshare.io/aYAnvb)私はいくつかのノートで作った。 – maccettura

    答えて

    0

    私があなたの意図を適切に理解していれば、

    a。あなたはLambda expressionを使用することができますが、この日を学ぶのは悪い習慣ではありません。
    b。あなたのロジックについての私のコメントに気づく。
    c。ユーザーが小文字または大文字を入力するかどうかを考慮せずに検索したい場合はToLower()を使用してください(その質問に表示されている問題が発生する可能性があります)。 "Ri"は "rI"でなく "RI"は "ri" 。

    if (EmployeeTb.Text != string.Empty) 
    { 
        ResultsFLP.Controls.Clear(); 
        var emp = Cerealto.Classes.Employees.EmployeeList.AsEnumerable().Where(x=> (x.firstName+ " " + x.lastName).ToLower().Contains(EmployeeTb.Text.ToString().ToLower().Trim())).Select(e=>e).ToList(); 
    
        if(emp != null) 
        { 
         foreach(Cerealto.Classes.Employee Employee e in emp) 
         { 
          ESR = new EmployeeSearchResultUC(e.employeeID, e.firstName + " " + e.lastName); 
          ResultsFLP.Controls.Add(ESR); 
         } 
        } 
    } 
    else 
    { 
        // there is no results here clear everything or make no change (dont use the line ResultsFLP.Controls.Clear();/load all employees again) 
        ResultsFLP.Controls.Clear(); 
    } 
    
    +0

    これは非常に良い解決策ではありません。コレクションを何回も繰り返すと、テキストボックスが空の場合、すべての従業員をコントロールに追加するというOPのロジックを考慮しません。 – maccettura

    +0

    @ maccettura強く私はそれに気がつきましたが、何も見つからなければすべての従業員を検索コンテナに表示したいのですが、私はelse条件の中でコメントしました。 – jonathana

    +0

    私はすべてのレコードを表示することによる混乱を完全に理解していますが、OPのビジネス要件に疑問を呈するのは私たちの責任ではありません。あなたのコードは、OPのロジックを複製せず、パフォーマンスの問題を引き起こします。あなたはおそらくあなたの答えを再訪問したいでしょう。 – maccettura

    関連する問題