我的表单上有 2 个来自 DevExpress 的 LookUpEdit 控件。两者都使用 anObservableCollection
作为它的数据源,一个是 type string
,另一个是 type double
。LookUpEdit 控件有一个称为事件的事件ProcessNewValue
,您猜对了,在控件中输入了一个新值。我在此事件中添加了一些代码以将新添加的值添加到 中,ObservableCollection
并在完成后自动选择它。这对于string
LooUpEdit 可以正常工作,但是当我使用double
LookUpEdit 尝试它时,它会将其添加到集合中,但随后会清除控件。
这是加载控件的代码,它被调用Form_Load()
:
void InitControls()
{
double[] issueNumbers = new double[5];
issueNumbers[0] = 155;
issueNumbers[1] = 156;
issueNumbers[2] = 157;
issueNumbers[3] = 158;
issueNumbers[4] = 159;
ObservableCollection<double> issues = new ObservableCollection<double>(issueNumbers);
lookupIssues.Properties.DataSource = issues;
DevExpress.XtraEditors.Controls.LookUpColumnInfoCollection colInfo = lookupIssues.Properties.Columns;
colInfo.Clear();
colInfo.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Column"));
colInfo[0].Caption = "Issue ID's";
string[] stringNumbers = Array.ConvertAll<double, string>(issueNumbers, Convert.ToString);
ObservableCollection<string> issuesString = new ObservableCollection<string>(stringNumbers);
lookupStringValue.Properties.DataSource = issuesString;
colInfo.Clear();
colInfo.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Column"));
colInfo[0].Caption = "String Issue ID's";
}
这是两者的 ProcessNewValue 事件(我已将它们重命名以尝试更容易看到哪个在做什么):
private void OnProcessNewValue_Double(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e)
{
ObservableCollection<double> source = (ObservableCollection<double>)(sender as LookUpEdit).Properties.DataSource;
if (source != null)
{
if ((sender as LookUpEdit).Text.Length > 0)
{
source.Add(Convert.ToDouble((sender as LookUpEdit).Text));
(sender as LookUpEdit).Refresh();
}
}
e.Handled = true;
}
private void OnProcessNewValue_String(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e)
{
ObservableCollection<string> source = (ObservableCollection<string>)(sender as LookUpEdit).Properties.DataSource;
if (source != null)
{
if ((sender as LookUpEdit).Text.Length > 0)
{
source.Add((sender as LookUpEdit).Text);
(sender as LookUpEdit).Refresh();
}
}
e.Handled = true;
}
正如您所看到的,除了在将文本添加到集合之前将文本转换为双精度之外,它的代码相同。
任何人都知道为什么将双精度值添加到集合中,但控件不会像使用字符串集合那样自动选择它?我什至尝试在之后对新添加的值进行硬编码,e.Handled = true;
但它仍然没有选择它。奇怪的是,如果我通过调试器运行它,我可以单步执行并看到lookupIssues
控件确实获得了新添加的值,并且它的Text
属性已设置为它,但是一旦事件终止,控件就会将其清除.. ……真奇怪。
任何帮助是极大的赞赏!
顺便说一句,我可以添加一个指向重复问题的示例项目的链接,但您需要安装 DevExpress v12.2.6 控件才能编译该项目。