【发布时间】:2011-09-22 10:52:48
【问题描述】:
我知道还有其他类似的问题,但他们的解决方案对我不起作用。
我有以下代码:
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);
}
object o是我之前设置的item,是我在循环中找到的PaperSize大小,但是object p是null。
【问题讨论】:
-
你试过 RefreshDataSource
-
@username 否,因为数据源在声明后不会更改,并且因为 LookupEdit 首先没有该方法。
标签: c# controls devexpress