我一直试图让这个工作并且没有成功。我已经为现有的数据库表定制了几十个现有页面并使用了选择器,但是无法让选择器用于自定义表的Maint页面。
我创建了一个带有表单的自定义页面,并尝试使用CD作为显示添加选择器。从阅读文档和比较其他开箱即用的页面,这就是我想出来的。
在我的数据库中,我的ID字段是我的PK并且自动增加int不为null,CD只是一个nvarchar(10)非空
以下是我的DAC中的ID和CD:
#region ID
[PXDBIdentity()]
[PXUIField(DisplayName = "ID")]
public Int32? ID { get; set; }
public class iD : IBqlField { }
#endregion
#region DesignCD
[PXDBString(10, IsUnicode = true, IsKey = true)]
[PXSelector(typeof(UsrDesign.iD), SubstituteKey = typeof(UsrDesign.designCD))]
public string DesignCD { get; set; }
public class designCD : IBqlField { }
#endregion
我可以使用prev和next按钮在记录之间切换,一切都很好,但是当使用选择器时,它不会改变记录。我已经尝试过commit changes = true以及我能想到的其他变体。
有人可以帮助解决这个看似愚蠢的问题吗?
谢谢!
答案 0 :(得分:0)
使用Identity字段时遇到了类似的问题,我无法在此处获得适当的解决方案。
我们做了什么,我们从db和dac中删除了identity属性 // [PXDBIdentity(IsKey = true)]
并且在行持久化事件中,如果ID为空,我们手动生成下一个ID
protected virtual void ROW_RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
{
if (e.Row == null) return;
ROW Doc = (ROW)e.Row;
if ((e.Operation & PXDBOperation.Command) == PXDBOperation.Insert)
{
ROW LastDoc = new ROW();
if (Doc.ID == null || Doc.ID.Equals("<NEW>"))
{
try
{
LastDoc = (ROW)PXSelectGroupBy<ROW, Aggregate<Max<ROW.ID>>>.Select(this);
}
catch { }
if (LastDoc != null)
{
if (LastDoc.ID != null)
Doc.ID = LastDoc.ID + 1;
else
Doc.ID = 1;
}
}
}
}
我不知道这个问题的确切原因,但这是我们解决它的方式。希望它可以帮到你。
答案 1 :(得分:0)
克里斯,
由于选择器属性已附加到CD属性,请尝试将其定义中的iD
更改为designCD
,它应该有效:
[PXSelector(typeof(UsrDesign.designCD), SubstituteKey = typeof(UsrDesign.designCD))]
答案 2 :(得分:0)
在我的场景中,选择器的问题是由于在表单上使用相同的DataMember以及页面上的选项卡引起的。我不太明白为什么这是一个问题,但创建一个备用视图PXSelect&gt;&gt; CurrentDesign并指定了视图解决问题的选项卡。
希望这将有助于将来可能犯同样错误的其他人。
感谢帮助人员。