为什么我的自动完成建议下拉列表是空白的
Why is my AutoComplete suggestion dropdown blank
我有一个 Xamarin 表单,我试图在其中添加 SyncFusion AutoComplete 控件。数据是一个简单的 class,只有三个字符串字段(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
上设置断点 - 您希望显示为建议的客户是否命中该断点?
交换 return true 和 return false,因此对于所有其他客户都是如此 - 与您想要的相反。看看它是否仍然是空白的。如果是,则不是过滤器 - 其他地方的代码干扰了显示。需要显示更多代码,或者制作一个 github 包含显示问题的最小回购协议。
[来自 OP] 问题是 DisplayMemberPath
上的 属性 名称区分大小写,过滤器检查也是如此。
过滤器的修复是忽略所有地方的大小写。例如
if (myCustomer.CustName.ToLower().Contains(text.ToLower()) || ...)
我们已经分析了报告的查询。我们已经通过使用以下代码片段实现了要求,
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;
}
我有一个 Xamarin 表单,我试图在其中添加 SyncFusion AutoComplete 控件。数据是一个简单的 class,只有三个字符串字段(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
上设置断点 - 您希望显示为建议的客户是否命中该断点?交换 return true 和 return false,因此对于所有其他客户都是如此 - 与您想要的相反。看看它是否仍然是空白的。如果是,则不是过滤器 - 其他地方的代码干扰了显示。需要显示更多代码,或者制作一个 github 包含显示问题的最小回购协议。
[来自 OP] 问题是
DisplayMemberPath
上的 属性 名称区分大小写,过滤器检查也是如此。
过滤器的修复是忽略所有地方的大小写。例如
if (myCustomer.CustName.ToLower().Contains(text.ToLower()) || ...)
我们已经分析了报告的查询。我们已经通过使用以下代码片段实现了要求,
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;
}