Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 不同的值成员,相同的控件 编辑1_C#_.net_Winforms_Data Binding_Devexpress - Fatal编程技术网

C# 不同的值成员,相同的控件 编辑1

C# 不同的值成员,相同的控件 编辑1,c#,.net,winforms,data-binding,devexpress,C#,.net,Winforms,Data Binding,Devexpress,我相信我的问题源于以下几点。填充下拉部分的函数将显示成员设置为CountyName。然后,当我尝试设置SelectedText或EditValue时,正如建议的那样,该函数只返回它尝试与下拉列表DisplayMember中的内容匹配的CountyID。我需要它来匹配ValueMember列表中的某些内容 使用下面的方法,我让它工作了,但这是一个黑客,我非常感谢找到一个真正的解决方案 lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["Resid

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

使用下面的方法,我让它工作了,但这是一个黑客,我非常感谢找到一个真正的解决方案

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按预期显示时,它工作正常

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

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();
我得到一个空盒子。我已逐级检查了代码,并为该成员返回了正确的ID

不幸的是,用于填充下拉选项的存储过程从维护表中提取CountyName和CountyID列。所以这是正确的。不幸的是,加载特定人员的当前县的存储过程从person表中提取,其中有一个名为ResidenticCountyId的列。之所以这样命名,是因为还有一个ResponsibilityCountyID列

我需要一个让他们共存的方法,有什么解决办法吗


谢谢

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

因此,您不应:

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

lkuResidenceCounty.Properties.ValueMember = "CountyID";
很好,只要您正确标识了要进行数据绑定的字段。一旦列表得到数据绑定,您应该会看到预期的结果

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

更新

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


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

ValueMember属性告诉列表在设置value属性时从哪个字段中提取。将ValueMember设置为CountyID后,当列表数据绑定时,它会将所有列表项的值属性设置为其尊重对象的CountyID字段

因此,您不应:

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

lkuResidenceCounty.Properties.ValueMember = "CountyID";
很好,只要您正确标识了要进行数据绑定的字段。一旦列表得到数据绑定,您应该会看到预期的结果

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

更新

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


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

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

更新

看看你的编辑,我想我更明白发生了什么。因此,您不希望更改引用数据列的ValueMember,而是希望更改编辑器的值?如果是这样的话,那么您肯定应该使用EditValue not SelectedText,我认为这不是要设置的,并将其分配给行[value\u field],如下所示:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

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

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

更新

看看你的编辑,我想我更明白发生了什么。因此,您不希望更改引用数据列的ValueMember,而是希望更改编辑器的值?如果是这样的话,那么您肯定应该使用EditValue not SelectedText,我认为这不是要设置的,并将其分配给行[value\u field],如下所示:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

执行此操作时会发生什么情况?

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

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();
回应您的编辑:根据文档:

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

更改BaseEdit.EditValue时, 编辑器定位并选择该行 谁的 RepositoryItemLookUpEditBase.ValueMember 字段包含新值。正文 在编辑框中,将更改以反映 新选定的行

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

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

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

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();
回应您的编辑:根据文档:

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

更改BaseEdit.EditValue时, 编辑器定位并选择该行 谁的 RepositoryItemLookUpEditBase.ValueMember 字段包含新值。正文 在编辑框中,将更改以反映 新选定的行

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

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

这两种方案的字段名不同。因为可能值的填充是从县维护表中提取的,而当前成员信息的填充是从成员表中提取的。@Refracted Paladin哦,我想我现在明白了。我更新了我的答案,但本质上你想使用SelectedValue属性。@Refracted Paladin lkuResidenceCounty是什么类型的控件?@Refracted Paladin啊那么你可能想试试SelectedText属性,看看它是否在SelectedValue的位置起作用。我想如果我的存储过程返回的是DisplayMember而不是ValueMember,那会起作用。听起来我可能有一个DevXPress特有的问题,我怀疑,我只是希望我能在这里和那里找到帮助,因为它不是最好的支持站点。这两个场景的字段名不同。因为可能值的填充是从县维护表中提取的,而当前成员信息的填充是从成员表中提取的。@Refracted Paladin哦,我想我现在明白了。我更新了我的答案,但本质上你想使用SelectedValue属性。@Refracted Paladin lkuResidenceCounty是什么类型的控件?@Refracted Paladin啊那么你可能想试试SelectedText属性,看看它是否在SelectedValue的位置起作用。我想如果我的存储过程返回的是DisplayMember而不是ValueMember,那会起作用。听起来我可能有一个DevExpress特有的问题,我怀疑,我只是希望我能在这里和那里找到帮助,因为它不是最好的支持网站。请参阅上面的编辑,我将详细说明。请参阅上面的编辑,我将详细说明。