2016-05-16 66 views
2

我有一個畫面條目存儲交易數據,我想用動態的多選組合框選擇狀態和狀態數據從拍攝,但是當一些數據狀態選擇存儲的數據的量不不匹配已被選擇,Acumatica動態多選下拉

Screen Entry Screenshoot

Database Screenshoot

我有噸擁有以下代碼,但對我來說不起作用。

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; 
    } 
} 

有沒有其他的解決辦法,抱歉我的英文不好,謝謝。

+0

可否請你提供確切的集合爲目標字段(狀態)的屬性?我懷疑這個領域不夠大,無法適應所有的價值。我還注意到,您的字段中的值在最後包含額外的空格。 – Gabriel

回答

1

我注意到您對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 
+0

感謝您的建議,我的問題得到解決。 – Distor4by

+0

@ Distor4by很酷,感謝您的更新! – Gabriel