2016-12-21 21 views
0

C#Windowsフォームベースのアプリケーションがあります。そこには複数のコントロール(名前、ID、電話など)を保持するパネル(連絡先用)があります。私たちは、各コントロールのループ(forループ)によって、一致する連絡先コントロールのいずれかを表示するテキスト検索(名前、ID、電話など)を追加しました。コントロールコレクション内のテキストマッチングコントロールを見つける最も速い方法

これはうまくいきますが、連絡先が多い場合(100以上、合計100個のパネル)、時間がかかります。この場合、検索を高速化するための代替アプローチはありますか?

EDIT:

ここでは

Filter(Control Pls, string search) 
{ 
    foreach (Control ctrl in Pls.Controls) 
    { 
     var Name = ctrl.Controls.Find("name", true); 
     if ((Name != null) && (Name.Length != 0)) 
     { 
      Label n = (Label)Name[0]; 
      contactName = n.Text; 
     } 

     var Extn = ctrl.Controls.Find("extn", true); 
     if ((Extn != null) && (Extn.Length != 0)) 
     { 
      Label e = (Label)Extn[0]; 
      contactExtn = e.Text; 
     } if (contactName != null && contactExtn != null) 
     { 
       if (contactName.Contains(search) || contactExtn.Contains(search)) 
       { 
        ctrl.Show(); 
       } 
       else 
       { 
        ctrl.Hide(); 
       } 
     } 
     else 
     { 
      ctrl.Hide(); 
     } 
    } 
} 
+0

値が一致すれば、それを壊して検索するために、索引付けの概念を保持する弾性検索方法を使用することができます。 –

+0

私はすべての一致する連絡先を表示しなければならなかったので、私はループから壊れることはできません。 – rajkumaradass

+0

linqを試しましたか? –

答えて

0

次のコードは、最初に私はあなたの状況の私の理解を記述してみましょうです。私は、あなたがテーブルTContacts

  • 各パネルにマッチした行ごとに パネルを表示したい、あなたが連絡先は、リレーショナルデータベースのテーブル保存されている

    1. 、TContactsで見つかったTContacts各一致する連絡先については
    2. が言うことを前提としてい(例えばP1、P2、...)私の理解は、次に溶液は下のように正確である場合に一致 行

    のカラム値を表示するためのコントロールを設定している:

    1. TContactsテーブルのすべての行を格納するには、DataTable変数(VContactsなど)を使用します。
    2. String型の列(たとえば、PanelName)をDataTable VContactsの上に追加します。
    3. PanelName列の連絡先ごとに、それぞれのパネルコントロールのストア名。一致した連絡先
    4. を見つけるために
    5. 利用DataTable.Select()メソッドは、次にPanelName値を使用し、パネル制御を見つける、パネルコントロールを表示するには、show()メソッドを使用して、パネルの非表示残りは
    を制御します

    注: データベースを使用していない場合は、DataTable VContactsにコードを設定する必要があります。

  • +0

    私はここでデータベースを使用していません。 – rajkumaradass

    関連する問題