高效的自动完成TextBox

时间:2014-06-07 01:01:40

标签: c# winforms autocomplete visual-studio-2013 radtextbox

我正在我的Windows窗体应用程序中实现一个像Google一样工作的搜索功能。 我已经实现了自动完成,如下所示:

private void MemberSearch()
{
    // Name Search
    ConnectionClass.GetInstance().connection_string = Properties.Settings.Default.MindMuscleConnectionString;
    ConnectionClass.GetInstance().Sql = "select MemberInfo.memberName from MemberInfo";
    DataSet ds = ConnectionClass.GetInstance().GetConnection;
    AutoCompleteStringCollection name = new AutoCompleteStringCollection();
    for (int x = 0; x < ds.Tables[0].Rows.Count; x++)
    {
        name.Add(ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString());
    }
    memberNameSearchTxtBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    memberNameSearchTxtBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    memberNameSearchTxtBox.AutoCompleteCustomSource = name;
    // ID Search
    ConnectionClass.GetInstance().Sql = "select MemberInfo.memberID from MemberInfo";
    ds = ConnectionClass.GetInstance().GetConnection;
    AutoCompleteStringCollection id = new AutoCompleteStringCollection();
    for (int x = 0; x < ds.Tables[0].Rows.Count; x++)
    {
        id.Add(ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString());
    }
    memberIdSearchTxtBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    memberIdSearchTxtBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    memberIdSearchTxtBox.AutoCompleteCustomSource = id;
}

问题:

虽然这个自动完成工作正常但我认为如果记录数量达到数百万或更多,这种方法会正常吗?我在Form Load事件中调用此方法。有没有更有效的方法呢?

1 个答案:

答案 0 :(得分:0)

任何在用户输入字符时尝试提供数百万条记录的系统都会崩溃。如果你预加载它,那就是未经过滤的访问它将需要很长时间和大量的RAM才能启动..

因此,您应该尝试在数据中添加度量算法。这通常是几件事的组合。立即想到两件事:

  • 接受记录为正确记录的次数将添加到测量值
  • 未被接受的时间跨度将从测量值中减去

您可能需要谷歌 Google自动填充算法以获取更多想法..

而不是选择你想要的一切

  • 选择order by gauge-field
  • 选择where子句以获取最佳记录
  • 连续降低仪表阈值,直到结果集合理为大

我假设您使用Telerik AutoCompleteBox?访问他们的forums也可能有所帮助..