编辑1

我相信我的问题源于以下几点。填充下拉部分的函数将显示成员设置为CountyName。然后,当我尝试按照建议设置SelectedText或EditValue时,该函数只返回它尝试与DropDown列表DisplayMember中的内容匹配的CountyID。我需要它将它与ValueMember列表中的内容相匹配。

使用以下内容我得到了它的工作,但它是一个HACK,我非常感谢找到一个真正的解决方案。

lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["ResidencyCountyID"].ToString());

原帖

我在成员表单上有一个查找框(DevExpress),我使用此代码从DB填充可能的值 - >

        lkuResidenceCounty.Properties.DataSource = ConnectBLL.BLL.Person.CountyList();
        lkuResidenceCounty.Properties.PopulateColumns();
        lkuResidenceCounty.Properties.DisplayMember = "CountyName";
        lkuResidenceCounty.Properties.ValueMember = "CountyID";
        lkuResidenceCounty.Properties.Columns[0].Visible = false;
        lkuResidenceCounty.Properties.Columns[2].Visible = false;
        lkuResidenceCounty.Properties.Columns[3].Visible = false;

这可以正常工作,因为CountyName按预期显示。

但是,当我尝试使用以下内容加载此字段的现有成员值时,该值是从DataSet中取一行的函数的一部分 - >

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

我得到一个空白框。我已经逐步完成了代码,并为该成员返回了正确的ID。

不幸的是,填充下拉选项的存储过程从维护表中拉出“CountyName”列。 &安培; " CountyID&QUOT ;.这是正确的。不幸的是,加载特定人员当前县的存储过程来自人员表,其中有一个名为“ResidencyCountyID”的列。之所以如此命名,是因为还有一个“ResponsibilityCountyID”。列。

我需要一种方法让他们共存,任何解决方案?

谢谢!

有帮助吗?

解决方案

DisplayMember和ValueMember用于使用可选值列表填充控件。要设置已填充的LookUpEdit控件的选定值,请设置其 EditValue 财产:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();

响应您的编辑:根据文档:

  

当前选定的行确定编辑器编辑值和显示文本的值。 BaseEdit.EditValue的值是从RepositoryItemLookUpEditBase.ValueMember字段获取的,而编辑框中显示的文本是从所选行的RepositoryItemLookUpEditBase.DisplayMember字段中获取的。

     

更改BaseEdit.EditValue时,   编辑器找到并选择行   谁的   RepositoryItemLookUpEditBase.ValueMember   字段包含新值。文本   在编辑框中更改为反映   新选择的行。

我不使用这些控件,但听起来它不应该像你描述的那样工作。我认为ToString()是问题,因为EditValue接受一个对象,所以它可能期望值为int。尝试:

lkuResidenceCounty.EditValue = (int)row["ResidencyCountyID"];

其他提示

ValueMember属性告诉列表在设置Value属性时要从哪个字段中提取。将ValueMember设置为“CountyID”后,当列表为Databound时,它会将所有列表项的值属性设置为其尊重对象的CountyID字段。

因此,你不应该这样做:

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

而是

lkuResidenceCounty.Properties.ValueMember = "CountyID";

完全没问题,只要你正确地确定了你想要数据绑定的字段。一旦列表获得数据绑定,您应该会看到您期望的结果。

然而,在查看您的代码后,您的字段似乎不匹配。在一个地方你正在使用ResidencyCountyID而在另一个地方你正在使用CountyID。这很可能是你混淆的根源。找出实际字段名称是什么,并确保将ValueMember设置为该值。

<强>更新

阅读评论后,您要查找的是SelectedValue属性。 SelectedValue属性告诉列表将所选值强制为您提供的任何输入。

基本上你在这里有两件事。 ValueMember告诉列表使用什么作为数据源的值,而SelectedValue告诉列表当前选择的值应该是什么。

为什么您需要相同的LookUpEdit才能拥有两个值成员?它是独立使用还是在网格中使用?如果是独立的,您可以根据当前行替换两个存储库编辑器。但是,ValueMember有两个以上的可能值吗?这也会使事情复杂化。

更新

看看你的编辑,我想我明白了什么会发生什么。那么,您不希望更改ValueMember(指向数据列),而是更改编辑器的值?如果是这样,那么你肯定应该使用EditValue(不是SelectedText,我认为不应该设置),并将它分配给row [&quot; value_field&quot;],如下所示:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

当你这样做时会发生什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top