2011-07-05 10 views
0

私は単純なListViewを3〜4列のクライアントリストを表示しました。その下にはTextBoxがあり、これはSql Serverで検索して関連する結果を表示するために使用されます(基本的に入力時に1文字ごとにsql queryを実行します。秒、その後、別の文字が、それは少し速く行い、その後、別のレコードの多くを表示...WinFormsでcharsの量が3以上の場合ListViewで検索結果を表示

だから私はこれまで可能な修正のカップルについて考えた:

  • スタートを3つの文字を入力した後検索(名前には少なくとも3文字以上)、1文字目/ 2文字目には何もしないで0を表示します(検索から戻ってもまだ遅れています)
  • リストを一度List<string>にロードするか、これをカバーするオブジェクトを作成しますが、他のユーザー(新しいクライアントの追加、名前の更新など)が他の作業場所から行った変更に常に同期する必要があります適切な情報でリストを更新してください。それをデータベースに関連付けることは、より簡単な考えのようです。
  • 他のアイデア?多分両方の組み合わせ?

    private void klienciSearchBoxTextChanged(object sender, EventArgs e) { 
         string varSzukaj = klienciSearchBox.Text.Trim(); 
         if (varSzukaj.Length >= 3) { 
          pobierzDaneSqlKlientaOgolne(listViewKlienci, lvwColumnSorterKlienci, varSzukaj, radioButtonWyszukajPoPortfelu.Checked ? 1 : 0); 
         } else if (varSzukaj.Length > 0 && varSzukaj.Length < 3) { 
          // do nothing 
         } else { 
          pobierzDaneSqlKlientaOgolne(listViewKlienci, lvwColumnSorterKlienci, varSzukaj, radioButtonWyszukajPoPortfelu.Checked ? 1 : 0); 
        } 
    

    第一または第二のアイデアは十分ですか誰かが他の実装を提案することができます:

は、ここでのサンプルコードは?

+2

-1投票が必要です – MadBoy

+0

私はこれを0に戻しました有効なユーザーインターフェイスのシナリオです。誰がダウン投票したか分からない。 –

答えて

1

同様の状況で、私たちはユーザーが返す結果の数を制限することによってこれを処理しました。我々は、物事をうまく保つために500の制限を使い、selectクエリを実行する前にカウントクエリを実行して、ソフトウェアを一時停止するかどうかを確認しました。

これは、問題が応答しないGUIであるか、ユーザーを待っているかによっても異なります。別のスレッドでクエリを実行することによって応答しないGUIが修正される可能性があるため、クエリが実行されているかどうかを確認して、ユーザーが次の文字を入力するときにクエリをキャンセルできます。ユーザーの待機を防ぐもう1つの方法は、部分的な結果を表示することです。

+0

結果を待つことに関連する問題です。バックグラウンドスレッドを実行するのはオプションですが、3文字で返された結果が5または10のようなので、問題はそれほど大きくはないので、3文字からの検索を制限するのは良い方法です。唯一の「遅い」問題は、ユーザーがバックスペースを使用していて、リストに1200の名前を入れる必要があるためです.1秒から4秒かかりますが、その1回だけ(検索から戻るごとに)大したこと。 – MadBoy

1

現在検索しているインターフェイス設計のタイプは、更新頻度の低いデータに適しています。たとえば、週に1回更新する10000製品のリストがあるとします(この場合は、データをローカルにキャッシュし、タイプされたすべての文字に対してデータベースではなくキャッシュからデータを取得します)。これは、DBへの1つのクエリーであり、次にローカルキャッシュへの多くのクエリーです。

あなたのケースでは、データの更新がより一般的なので、ユーザーがいくつかの文字を入力できるようにインターフェイスを変更し、結果を取得する準備ができたら検索ボタンを押します。 JamesBが指摘しているように、結果を元に戻すことも助けになりますが、依然として多くのクエリを使用してデータベースにヒットしています。ユーザーが何らかのデータ待ち時間で暮らすことができる場合、キャッシングはオプションになる可能性があります。 "M"、 "馬"、 "Mad"、 "Madb"などデータベースの不必要な検索がたくさんあります...

+0

検索ボタンもオプションになります。最初のオプションやボタンが好きかどうかをユーザーに尋ねます。ボタンは確かに検索を制限する – MadBoy