1

编辑 1

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

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

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

原帖

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

        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 按预期显示。

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

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

我得到一个空盒子。我已单步执行代码,并且正在为会员返回正确的 ID。

不幸的是,填充下拉选项的存储过程从维护表中提取,其中包含“CountyName”和“CountyID”列。所以这是正确的。不幸的是,加载特定人员当前县的存储过程从 Person Table 中提取,其中有一个名为“ResidencyCountyID”的列。之所以如此命名,是因为还有一个“ResponsibilityCountyID”列。

我需要一种让它们共存的方法,有什么解决方案吗?

谢谢!

4

3 回答 3

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"];
于 2009-06-19T13:13:26.940 回答
1

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

因此,您不应该这样做:

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

反而

lkuResidenceCounty.Properties.ValueMember = "CountyID";

非常好,只要您正确识别了您尝试数据绑定的字段。一旦列表获得数据绑定,您应该会看到您期望的结果。

但是,在查看您的代码之后,您似乎与您的领域不匹配。在一个地方您使用 ResidencyCountyID,而在另一个地方您使用 CountyID。这很可能是你困惑的根源。弄清楚实际的字段名称是什么,并确保将 ValueMember 设置为该名称。

更新

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

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

于 2009-06-16T16:36:23.627 回答
1

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

更新

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

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

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

于 2009-06-19T13:04:56.163 回答