【问题标题】:Why is my AutoComplete suggestion dropdown blank为什么我的自动完成建议下拉列表为空白
【发布时间】:2022-01-11 22:09:19
【问题描述】:

我有一个 Xamarin 表单,我试图在其中添加一个 SyncFusion AutoComplete 控件。数据是一个简单的类,只有三个字符串字段(CUSTNMBR、CUSTNAME、ZIP)。我希望它匹配任何字段并显示对应的CUSTNMBR。这是我在 Xaml 中的一行:

 <xForms:SfAutoComplete x:Name="customerAutoComplete" WidthRequest="120" BackgroundColor="White" />

在表单的代码隐藏构造函数中,我调用LoadCustomerData()

private async void LoadCustomerData()
{
    customerAutoComplete.DataSource = await GetCustomerCodes();
    customerAutoComplete.DisplayMemberPath = "CUSTNMBR";
    customerAutoComplete.SelectedValuePath = "CUSTNMBR";
    customerAutoComplete.SuggestionMode = SuggestionMode.Custom;
    customerAutoComplete.Filter = FilterCustomers;
    customerAutoComplete.AutoCompleteMode = AutoCompleteMode.Suggest;
    customerAutoComplete.Watermark = "Zip Code, Customer ID, or Customer Name";
    customerAutoComplete.MinimumPrefixCharacters = 3;
}

这是我的过滤方法。

private bool FilterCustomers(string search, object customer)
{
    var text = customerAutoComplete.Text;

    if (customer != null)
    {
        var myCustomer = (OrganizationSearchDto)customer;
        if (myCustomer.CustName.Contains(text) || myCustomer.CustNmbr.Contains(text) ||
            myCustomer.Zip.Contains(text))
        {
            return true;
        }
    }

    return false;
}

当我有customerAutoComplete.SuggestionMode = SuggestionMode.Contains 时,上面的代码部分工作,但它在其他两个字段上不匹配。现在它仍在运行,但下拉列表中没有显示任何内容(其空白)。为什么我的下拉菜单是空白的?我们将不胜感激任何提示、建议或正确方向的努力。

【问题讨论】:

  • 如果您在return true 上设置断点,那么您希望它显示的客户是否到达了该行?感谢您确认(并在问题中说明)它在使用 SuggestionMode.Contains 时部分有效 - 这是找出问题所在的良好第一步。我没有看到任何明显的错误(尽管我没有使用过同步融合)。
  • @ToolmakerSteve 是的,它到达了断点。
  • 我不喜欢从构造函数(不是异步环境)调用异步方法。我认为这不是问题(因为Contains 版本运行正常),但GetCustomerCodes 是否正在调用服务器?如果是这样,您是否对硬编码数据进行了测试,以便它可以立即返回?
  • 另一个测试:交换 return truereturn false,所以对于所有其他客户来说都是如此 - 与您想要的相反。看看它是否仍然是空白的。这将改变我们需要寻找问题的地方。另外:将整个内容包装在一个 try-catch 中,并在 catch 块中设置一个断点(可能将return false; 放在那里)。以防其中一项出现问题。
  • @ToolmakerSteve 谢谢,你帮我找到了错误。 1.) DisplayMemberPath 上的属性名称区分大小写。 2.) 我的过滤器检查也区分大小写。您引导我完成了导致我得到答案的步骤,所以请回答一下,以便我接受。

标签: c# xamarin.forms syncfusion


【解决方案1】:

对于遇到这种情况的任何人,请进行测试:

  1. return true 上设置断点 - 该断点是否针对您希望显示为建议的客户?

  2. 交换返回 true 和返回 false,因此所有 OTHER 客户都为 true - 与您想要的相反。看看它是否仍然是空白的。如果是,那么它不是过滤器 - 其他地方的代码干扰了显示。需要显示更多代码,或者创建一个包含显示问题的最小 repo 的 github。

  3. [来自 OP] 问题在于 DisplayMemberPath 上的属性名称区分大小写,过滤器检查也是如此。

过滤器的修复是忽略所有地方的大小写。例如

if (myCustomer.CustName.ToLower().Contains(text.ToLower()) || ...)

【讨论】:

    【解决方案2】:

    我们已经分析了报告的查询。我们通过使用如下代码sn-p实现了需求,

    public bool ContainingSpaceFilter(string search, object item)
    {
        if (item != null)
        {
            var myCustomer = item as Employee;
    
            if (**myCustomer.Name.ToUpper().Contains(search.ToUpper()**) || myCustomer.ID.Contains(search) ||
       myCustomer.ZipCode.Contains(search))
            {
                return true;
            }
        }
    
        return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 2014-08-18
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多