我相信我的问题源于以下几点。填充下拉部分的函数将显示成员设置为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”。这是正确的。不幸的是,加载特定人员当前县的存储过程来自Person Table,其中有一个名为“ResidencyCountyID”的列。之所以如此命名,是因为还有一个“ResponsibilityCountyID”列。
我需要一种方法让他们共存,任何解决方案?
谢谢!
答案 0 :(得分:2)
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"];
答案 1 :(得分:1)
ValueMember属性告诉列表在设置Value属性时要从哪个字段中提取。将ValueMember设置为“CountyID”后,当列表为Databound时,它会将所有列表项的值属性设置为其尊重对象的CountyID字段。
因此,你不应该这样做:
lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();
而是
lkuResidenceCounty.Properties.ValueMember = "CountyID";
完全没问题,只要你正确地确定了你想要数据绑定的字段。一旦列表获得数据绑定,您应该会看到您期望的结果。
然而,在查看您的代码后,您的字段似乎不匹配。在一个地方你正在使用ResidencyCountyID而在另一个地方你正在使用CountyID。这很可能是你混淆的根源。找出实际字段名称是什么,并确保将ValueMember设置为该值。
<强>更新强>
阅读评论后,您要查找的是SelectedValue属性。 SelectedValue属性告诉列表将所选值强制为您提供的任何输入。
基本上你在这里有两件事。 ValueMember告诉列表使用什么作为数据源的值,而SelectedValue告诉列表当前选择的值应该是什么。
答案 2 :(得分:1)
为什么您需要相同的LookUpEdit才能拥有两个值成员?它是独立使用还是在网格中使用?如果是独立的,您可以根据当前行替换两个存储库编辑器。但是,ValueMember有两个以上的可能值吗?这也会使事情复杂化。
更新
看看你的编辑,我想我明白了什么会发生什么。那么,您不希望更改ValueMember(指向数据列),而是更改编辑器的值?如果是这样,那么你一定要使用EditValue(不是SelectedText,我认为不应该设置),并将其分配给row [“value_field”],如下所示:
lkuResidenceCounty.EditValue = row["ResidencyCountyID"];
当你这样做时会发生什么?