【问题标题】:Quickest way to find a text matching control in a control collection在控件集合中查找文本匹配控件的最快方法
【发布时间】:2016-12-21 06:42:13
【问题描述】:

我们有一个基于 C# Windows 窗体的应用程序,其中有一个面板(用于联系人),其中包含多个控件(如姓名、ID、电话等)。我们添加了一个文本搜索(包括姓名、ID、电话等),通过循环(for 循环)每个控件来显示任何匹配的联系人控件。

这很好用,但如果我们有更多的联系人(比如超过 100 个,即总共 100 个面板),则需要更多时间。在这种情况下是否有任何替代方法可以加快搜索速度?

编辑:

下面是代码

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();
        } 
    } 
}

【问题讨论】:

  • 如果你得到匹配的值,然后打破你的循环,搜索你可以使用弹性搜索方法,它包含索引概念,它肯定会加快你的搜索速度。
  • 我无法退出循环,因为我必须显示所有匹配的联系人。
  • 你试过 linq 吗?
  • 每个联系人是否在面板或用户控件上都有自己的控件?
  • 我还没有尝试过 linq。每个联系人面板中至少有五个控件。

标签: c# winforms controls


【解决方案1】:

首先让我描述一下我对您的情况的理解。我认为

  1. 你有联系人存储的关系数据库表,比如 TContacts
  2. 对于在 TContacts 中找到的每个匹配联系人,您希望显示一个 TContacts 表中每个匹配行的面板
  3. 每个面板(比如 P1、P2、...)都有一组控件来显示匹配的列值 行

如果我的理解是正确的,那么解决方案如下:

  1. 使用 DataTable 变量(比如 VContacts)存储 TContacts 表的所有行。
  2. 在上面的 DataTable VContacts 中添加一列(比如 PanelName)字符串类型。
  3. 在 PanelName 列中为每个联系人存储相应面板控件的名称。
  4. 使用 DataTable.Select() 方法查找匹配的联系人
  5. 然后使用 PanelName 值找出面板控件,使用 Show() 方法显示面板控件并隐藏其余面板控件

注意: 如果您不使用任何数据库,则需要通过代码填充 DataTable VContacts。

【讨论】:

  • 我这里没有使用任何数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2010-11-17
相关资源
最近更新 更多