Acumatica 动态多选下拉菜单
Acumatica Dynamic MultiSelect Dropdown
我有一个存储交易数据的屏幕条目,我想使用 multiselect 组合框 到 select 状态的动态和状态数据被获取来自table,但当某些数据状态为selected时,存储的数据量不匹配 已经 selected,
我试过下面的代码,但它对我不起作用。
public class StatusMultiStringListAttribute : PXStringListAttribute
{
public StatusMultiStringListAttribute() : base()
{
PXResultset<StatusTable> rslt = PXSelect<StatusTable>.Select(new PXGraph());
List<string> values = new List<string>();
List<string> labels = new List<string>();
foreach (PXResult<StatusTable> item in rslt)
{
BSMTStatus e = (StatusTable)item;
values.Add(e.StatusID);
labels.Add(e.Description);
}
this._AllowedValues = values.ToArray();
this._AllowedLabels = labels.ToArray();
MultiSelect = true;
}
}
有没有其他解决办法,抱歉我的英文不好,谢谢。
我注意到您对 http://asiablog.acumatica.com/2016/03/multiselect-combo-box.html 的评论,并看到您发布了一些额外的代码。根据您的示例代码,我发现了两个问题:
首先,您从 StatusTable DAC 加载的值包含未修剪的尾随 spaces。您没有提供 StatusTable DAC 的声明,但可以安全地从您的屏幕截图中假设该字段的 IsFixed
属性设置为 true
。使用这些设置,系统将在您的值末尾添加白色 space。要在目标字段中保存 space,我建议在构造函数代码中添加一个 Trim():
foreach (PXResult<StatusTable> item in rslt)
{
BSMTStatus e = (StatusTable)item;
values.Add(e.StatusID.Trim()); //Remove any white-space
labels.Add(e.Description);
}
其次,您存储所选值的状态字段的长度不足以容纳多个选择。它目前被定义为 20 个字符 ([PXDBString(20, IsFixed=true)]
),即使假设您删除了白色 space,您仍然只能有 4 个选择。我建议您将其更改为 255,并删除 IsFixed=true
,因为该字段不需要它:
[PXDBString(255)]
[PXDefault]
[PXUIField(DisplayName = "Status")]
[StatusStringList]
public virtual string Status
我有一个存储交易数据的屏幕条目,我想使用 multiselect 组合框 到 select 状态的动态和状态数据被获取来自table,但当某些数据状态为selected时,存储的数据量不匹配 已经 selected,
我试过下面的代码,但它对我不起作用。
public class StatusMultiStringListAttribute : PXStringListAttribute
{
public StatusMultiStringListAttribute() : base()
{
PXResultset<StatusTable> rslt = PXSelect<StatusTable>.Select(new PXGraph());
List<string> values = new List<string>();
List<string> labels = new List<string>();
foreach (PXResult<StatusTable> item in rslt)
{
BSMTStatus e = (StatusTable)item;
values.Add(e.StatusID);
labels.Add(e.Description);
}
this._AllowedValues = values.ToArray();
this._AllowedLabels = labels.ToArray();
MultiSelect = true;
}
}
有没有其他解决办法,抱歉我的英文不好,谢谢。
我注意到您对 http://asiablog.acumatica.com/2016/03/multiselect-combo-box.html 的评论,并看到您发布了一些额外的代码。根据您的示例代码,我发现了两个问题:
首先,您从 StatusTable DAC 加载的值包含未修剪的尾随 spaces。您没有提供 StatusTable DAC 的声明,但可以安全地从您的屏幕截图中假设该字段的 IsFixed
属性设置为 true
。使用这些设置,系统将在您的值末尾添加白色 space。要在目标字段中保存 space,我建议在构造函数代码中添加一个 Trim():
foreach (PXResult<StatusTable> item in rslt)
{
BSMTStatus e = (StatusTable)item;
values.Add(e.StatusID.Trim()); //Remove any white-space
labels.Add(e.Description);
}
其次,您存储所选值的状态字段的长度不足以容纳多个选择。它目前被定义为 20 个字符 ([PXDBString(20, IsFixed=true)]
),即使假设您删除了白色 space,您仍然只能有 4 个选择。我建议您将其更改为 255,并删除 IsFixed=true
,因为该字段不需要它:
[PXDBString(255)]
[PXDefault]
[PXUIField(DisplayName = "Status")]
[StatusStringList]
public virtual string Status