* UIComboBox: 过滤时修复ValueMember绑定值的显示

This commit is contained in:
Sunny 2022-05-04 15:16:09 +08:00
parent 82355a3cda
commit 686d5cf828

View File

@ -27,6 +27,7 @@
* 2022-04-15: V3.1.3
* 2022-04-16: V3.1.3
* 2020-04-20: V3.1.5
* 2020-05-04: V3.1.8 ValueMember绑定值的显示
******************************************************************************/
using System;
@ -65,8 +66,8 @@ namespace Sunny.UI
{
SelectTextChange = true;
filterSelectedItem = filterList[(int)sender];
filterSelectedValue = GetItemText(filterSelectedItem);
Text = filterSelectedValue.ToString();
filterSelectedValue = GetItemValue(filterSelectedItem);
Text = GetItemText(filterSelectedItem).ToString();
edit.SelectionStart = Text.Length;
SelectedValueChanged?.Invoke(this, EventArgs.Empty);
SelectTextChange = false;
@ -126,8 +127,8 @@ namespace Sunny.UI
{
SelectTextChange = true;
filterSelectedItem = filterList[idx];
filterSelectedValue = GetItemText(filterSelectedItem);
Text = filterSelectedValue.ToString();
filterSelectedValue = GetItemValue(filterSelectedItem);
Text = GetItemText(filterSelectedItem).ToString();
edit.SelectionStart = Text.Length;
SelectedValueChanged?.Invoke(this, EventArgs.Empty);
SelectTextChange = false;
@ -205,6 +206,23 @@ namespace Sunny.UI
}
}
private object GetItemValue(object item)
{
if (dataManager == null)
return item;
if (ValueMember.IsNullOrWhiteSpace())
return null;
PropertyDescriptor descriptor = dataManager.GetItemProperties().Find(ValueMemberBindingMemberInfo.BindingField, true);
if (descriptor is not null)
{
return descriptor.GetValue(item);
}
return null;
}
public Control ExToolTipControl()
{
return edit;
@ -322,6 +340,7 @@ namespace Sunny.UI
FillFilterTextEmpty();
filterSelectedItem = null;
filterSelectedValue = null;
SelectedValueChanged?.Invoke(this, EventArgs.Empty);
}
}
}
@ -635,9 +654,15 @@ namespace Sunny.UI
public string ValueMember
{
get => ListBox.ValueMember;
set => ListBox.ValueMember = value;
set
{
ListBox.ValueMember = value;
ValueMemberBindingMemberInfo = new BindingMemberInfo(value);
}
}
BindingMemberInfo ValueMemberBindingMemberInfo;
[
DefaultValue(null),
Browsable(false),