Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DevExpress LookupEdit-按代码设置所选数据行_C#_Controls_Devexpress - Fatal编程技术网

C# DevExpress LookupEdit-按代码设置所选数据行

C# DevExpress LookupEdit-按代码设置所选数据行,c#,controls,devexpress,C#,Controls,Devexpress,我知道还有其他类似的问题,但它们的解决方案不适合我。 我有以下代码: 用数据源填充LookupEdit效果很好,用户可以从下拉列表中选择所需的纸张大小,然后 lueSizes.GetSelectedDataRow()作为纸张大小 然后按预期返回PaperSize对象 我的问题是设置EditValue,它什么也不做。我已经验证了在运行时,数据源包含PS.PaperSize中的所有PaperSize对象,包括在foreach循环中找到的对象。但设置EditValue=size不会导致所选数据行相应更

我知道还有其他类似的问题,但它们的解决方案不适合我。

我有以下代码:

用数据源填充LookupEdit效果很好,用户可以从下拉列表中选择所需的纸张大小,然后

lueSizes.GetSelectedDataRow()作为纸张大小

然后按预期返回PaperSize对象

我的问题是设置EditValue,它什么也不做。我已经验证了在运行时,数据源包含PS.PaperSize中的所有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(大小)

lueSizes.EditValue=0

所有这些都不起任何作用,所选数据行将保持NULL,并且不向用户显示任何内容

我还可以尝试用代码设置所选数据行吗?

编辑:


对象o是我前面设置的项目,即我在循环中找到的纸张大小,但对象p为空。

您必须确保分配的值存在于lookupEdit的数据源中,
然后尝试直接设置
.Text
属性

拉动基础指定对象的步骤

PaperSize  selectedPS = (PaperSize)lueSizes.Properties.GetDataSourceRowByDisplayValue(lueSizes.Text)

我想我至少找到了一个解决办法:




首先,我让循环在BindingSource中搜索,我现在必须明确定义BindingSource,而不是Printersettings对象

接下来,我可能不会设置DisplayValue属性

最后,我避免查找数据行,而是直接查找编辑值。不知道有什么限制


我不知道还有什么东西会断裂,如果有的话,但现在它工作了。

我知道这是一个旧线程,但我也遇到了同样的问题。接受的答案不是最佳实践,因为我们的目标是获得选定的对象,而不是关键值。解决方法是在EditValueChangedEvent被激发后立即调用lookupEdit.Properties.ForceInitialize(),然后GetSelectedDataRow()应该可以工作。如果不通过鼠标更改查找编辑,则可以解决此问题。

添加lueSizes.Text=size.PaperName;或者将“editvalue=”行替换为它不会产生任何效果。GetSelectedDataRow()一直返回NULL。不,正如我所写的,它什么也不做。显示给用户的行仍然是“[EditValue is null]”如果
EditValue为null
,则分配的值在原始数据源中不存在!,另外,
DevExpress.XtraEditors.LookUpEdit
方法中不存在方法
GetSelectedDataRow
!您使用的是什么版本的DevExpress?无论如何,请查看我的帖子以了解更多更新我使用的是10.2.8,GetSelectedDataRow()是这样的:我在运行时检查了数据源,它确实包含PS.PaperSizes中的所有PaperSize对象,包括在foreach循环中找到的对象。我只是不知道为什么它不被接受为EditValueI我已经说过,拉取当前选定的纸张大小没有问题,如何做不是我的问题。如果用户从列表中选择了一个项目,则GetSelectedDataRow()作为PaperSize可以很好地工作。我的问题是,如何按代码选择项目?您尝试过吗RefreshDataSource@username否,因为数据源在声明后不会更改,而且LookupEdit首先没有该方法。我在表单(包含此控件)的构造函数中添加了lookupEditSelector.Properties.ForceInitializ()这让它起作用了。谢谢
    private void lueSizes_EditValueChanged(object sender, EventArgs e)
    {
        object o = lueSizes.EditValue;
        object p = lueSizes.GetSelectedDataRow();
        PaperSize size = o as PaperSize;
        UpdateSize(size);
    }
PaperSize  selectedPS = (PaperSize)lueSizes.Properties.GetDataSourceRowByDisplayValue(lueSizes.Text)
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);
}