我知道还有其他问题,但他们的解决方案对我不起作用。
我有以下代码:
lueSizes.Properties.DataSource = new BindingSource(PS.PaperSizes, null); lueSizes.Properties.Columns.Add(new LookUpColumnInfo("PaperName", "Größe")); lueSizes.Properties.DisplayMember = "PaperName"; lueSizes.Properties.ValueMember = "PaperName"; //PS is a regular System PrinterSettings object foreach (PaperSize size in PS.PaperSizes) //I confirmed with debugging that this actually happens correctly if (size.RawKind == binSettings.SizeRawKind) { lueSizes.EditValue = size; break; }
使用DataSource填充LookupEdit工作正常,用户可以从下拉列表中选择所需的PaperSize,并且
lueSizes.GetSelectedDataRow()as PaperSize
然后按预期返回PaperSize对象。
我遇到的问题是设置EditValue,它什么都不做。我已经验证了在运行时,DataSource包含PS.PaperSizes中的所有PaperSize对象,包括foreach循环中的对象。但是设置EditValue = size不会导致所选数据行相应更新。
我尝试的其他变体是:
lueSizes.EditValue = size.PaperName;
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayText(size.PaperName);
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayValue(size.PaperName);
lueSizes.EditValue = lueSizes.Properties.GetKeyValueByDisplayValue(size);
lueSizes.EditValue = 0;
这些都不做任何事情,选定的数据行保持为NULL并且不向用户显示任何内容。
我还可以尝试通过代码设置所选的DataRow吗?
编辑:
private void lueSizes_EditValueChanged(object sender, EventArgs e)
{
object o = lueSizes.EditValue;
object p = lueSizes.GetSelectedDataRow();
PaperSize size = o as PaperSize;
UpdateSize(size);
}
对象o是我之前设置的项目,我在循环中找到的PaperSize大小,但对象p为空。
答案 0 :(得分:1)
我想我至少找到了解决方法:
BindingSource bindingSource = new BindingSource(PS.PaperSizes, null);
lueSizes.Properties.DataSource = bindingSource;
lueSizes.Properties.Columns.Add(new LookUpColumnInfo("PaperName", "Größe"));
lueSizes.Properties.DisplayMember = "PaperName";
foreach (PaperSize size in bindingSource)
if (size.RawKind == BinSettings.SizeRawKind)
{
lueSizes.EditValue = size;
break;
}
private void lueSizes_EditValueChanged(object sender, EventArgs e)
{
PaperSize size = lueSizes.EditValue as PaperSize;
Update(size);
}
首先,我让循环搜索BindingSource,我现在必须明确定义,而不是Printersettings对象。
接下来,我可能不会设置DisplayValue属性。
最后,我避免查找DataRow并直接获取编辑值。不知道有什么限制
我不知道还有什么打破,如果有的话,但现在它有效。
答案 1 :(得分:0)
您必须确保指定的值存在于lookupEdit的数据源中,
然后尝试直接设置.Text
属性
拉取基础指定对象
PaperSize selectedPS = (PaperSize)lueSizes.Properties.GetDataSourceRowByDisplayValue(lueSizes.Text)
答案 2 :(得分:0)
我知道这是一个老线程,但我遇到了同样的问题。接受的答案不是最佳实践,因为我们的目标是获取所选对象而不是键值。解决方法是在EditValueChangedEvent被触发后立即调用lookupEdit.Properties.ForceInitialize(),GetSelectedDataRow()应该在之后工作。如果未通过鼠标更改lookupEdit,则可解决此问题。