我有一个选择多个字段的PXSelector,第一个字段是一个可以重复其值的字段(如下所示):
Field1 Field2 Field3
1234 LL description1
1234 PS description2
1234 CC description3
4321 BB description4
PXSelector代码:
[PXSelector(typeof(myTable.field1)
,typeof(myTable.field1)
,typeof(myTable.field2)
,typeof(myTable.field3)
,DescriptionField = typeof(myTable.field3))]
所选表的DAC将Field1和Field2作为键。
如果我选择上面的第二行或第三行,我每次都会获得第一行的Field3描述。有没有办法确保我只获得我选择的行的描述,而不是总是第一次出现?
答案 0 :(得分:0)
您必须使选择器对单个键进行操作,因为所选值是关键字段而不是整个DAC记录。
一种可能的方法是将唯一的记录号列添加到数据库表中,使选择器对该列进行操作,并为选择器设置不同的“TextField”属性,使其不显示记录号。
这是我如何在SerialNumber / InventoryItem上创建一个不是唯一值(包含重复)的选择器。
数据库脚本因数据库系统而异。我正在使用此脚本为MSSQL添加唯一的记录号到表:
--[mysql: Skip]
--[IfNotExists(Column = SOShipLineSplit.UsrUniqueID)]
BEGIN
alter table SOShipLineSplit add UsrUniqueID int identity(1,1)
END
GO
这是DAC声明。我使用PXDBIdentity匹配将列标记为记录号字段的数据库标识字段类型:
[Serializable]
public class SOShipLineSplit_Extension : PXCacheExtension<SOShipLineSplit>
{
#region UsrUniqueID
public abstract class usrUniqueID : IBqlField { }
[PXDBIdentity(IsKey = false)]
[PXUIField(DisplayName = "ID")]
public virtual int? UsrUniqueID { get; set; }
#endregion
}
我为使用此唯一ID键的选择器使用另一个DAC字段,并将描述设置为我想要在选择器中显示的实际字段:
#region SerialUniqueID
public abstract class serialUniqueID : IBqlField { }
[PXSelector(typeof(Search5<SOShipLineSplit_Extension.usrUniqueID,
InnerJoin<SOShipment, On<SOShipment.customerID, Equal<Current<customerID>>,
And<SOShipment.shipmentNbr, Equal<SOShipLineSplit.shipmentNbr>>>,
InnerJoin<InventoryItem, On<InventoryItem.inventoryID, Equal<SOShipLineSplit.inventoryID>>>>,
Where<SOShipLineSplit.lotSerialNbr, NotEqual<StringEmpty>>,
Aggregate<GroupBy<SOShipLineSplit.lotSerialNbr,
GroupBy<SOShipLineSplit.inventoryID>>>>),
typeof(SOShipLineSplit.lotSerialNbr),,
typeof(SOShipLineSplit.inventoryID),
typeof(InventoryItem.descr),
CacheGlobal = true,
DescriptionField = typeof(SOShipLineSplit.lotSerialNbr))]
[PXDBInt]
[PXUIField(DisplayName = "Serial Number")]
public virtual int? SerialUniqueID { get; set; }
#endregion
对于此选择器,我想在文本框中显示LotSerialNbr而不是唯一ID。因为默认情况下选择器显示它的键,所以我需要使用TextField属性:
<px:PXSelector ID="edSerialUniqueID"
runat="server"
DataField="SerialUniqueID"
TextField="LotSerialNbr"
AutoGenerateColumns="True">
选择器值将包含所选的唯一ID字段。要获取记录,您可以使用该密钥向数据库发出另一个请求。