我有一个用于存储交易数据的屏幕条目,我想使用带有multiselect组合框的动态来选择状态,并且状态数据是从表中获取的,但是当选择了某些数据状态时,存储的数据量与被选中

c# - Acumatica Dynamic MultiSelect下拉列表-LMLPHP

c# - Acumatica Dynamic MultiSelect下拉列表-LMLPHP

我尝试了以下代码,但对我而言不起作用。

 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加载的值包含未修剪的尾随空格。您尚未提供StatusTable DAC的声明,但是可以安全地从屏幕快照中假定此字段的IsFixed属性设置为true。使用这些设置,系统将在您的值的末尾添加空白。为了节省目标字段中的空间,我建议将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)]),即使假设您删除了空格,您仍然只能选择4个字符。我建议您将其更改为255,并同时删除IsFixed=true,因为此字段不需要它:

[PXDBString(255)]
[PXDefault]
[PXUIField(DisplayName = "Status")]
[StatusStringList]
public virtual string Status

关于c# - Acumatica Dynamic MultiSelect下拉列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37249865/

10-10 07:32