2017-01-09 69 views
0

我在庫存項目頁面上創建了一個視圖,該視圖顯示與正在查看的項目具有相同項目類別的所有項目。該視圖正確顯示,但當前屬性不正確。出於某種原因,relatedItems.Current記錄始終是當前頁面上的項目,而不是在網格中選擇的項目。自定義視圖的當前屬性沒有正確更新

我有ASPX頁面的回調函數和InventoryCD LinkCommand調用這個函數。奇怪的是,我在「項目類別」屏幕上顯示了相同的代碼,並且它完美地工作。

我自定義視圖的Current屬性始終是被點擊的記錄。我已將網格的SyncPosition設置設置爲true。有沒有問題,因爲我在InventoryItem上引用InventoryItem?由於

public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint> 
{ 

    #region Event Handlers 

    public PXSelectReadonly<InventoryItem, Where<InventoryItem.itemClassID, Equal<Current<InventoryItem.itemClassID>>, And<InventoryItem.inventoryID, NotEqual<Current<InventoryItem.inventoryID>>>>> relatedItems; 

    public PXAction<InventoryItem> ViewCurrentItem; 

    [PXButton] 
    protected virtual void viewCurrentItem() 
    { 

     InventoryItem row = relatedItems.Current; 

     // Create the instance of the destination graph 
     InventoryItemMaint graph = PXGraph.CreateInstance<InventoryItemMaint>(); 
     graph.Item.Current = row; 

     if (graph.Item.Current != null) 
     { 
      throw new PXRedirectRequiredException(graph, true, "Item"); 
     } 
    } 
} 

回答

0

請確認如果您在頁面中指定DependOnGrid屬性爲您的操作: -

<CallbackCommands> 
    ... 
    <px:PXDSCallbackCommand Name="ViewCurrentItem" Visible="true" DependOnGrid="RelatedGridID" /> 
</CallbackCommands> 

屬性,T200培訓材料解釋

enter image description here

替代選擇將要利用PXSelector的AllowEdit - 您不需要自定義操作。

<px:PXGrid … > 
    <Levels> 
     <px:PXGridLevel …> 
     <Columns> 
     … 
     </Columns> 
     <RowTemplate> 
      <px:PXSegmentMask runat="server" ID="CstPXSegmentMask2" DataField="InventoryCD" AllowEdit="True" />            
     </RowTemplate> 
     </px:PXGridLevel> 
    </Levels> 
</px:PXGrid> 

要在同一頁面更改的項目,

每個數據視圖應該是指一種獨特的主數據訪問類(DAC),除非你想顯示在同一個數據記錄多個容器控件。因此,您需要創建一個新的DAC來表示繼承自InventoryItem的相關項目,併爲BQL語句中使用的派生類的數據字段定義新的抽象類。

[Serializable] 
public class RelatedInventoryItem : InventoryItem 
{ 
    public new abstract class inventoryID : IBqlField { }; 

    public new abstract class itemClassID : IBqlField { }; 
} 

和你的數據視圖應該是

public PXSelectReadonly<RelatedInventoryItem, 
         Where<RelatedInventoryItem.itemClassID, 
           Equal<Current<InventoryItem.itemClassID>>, 
          And<RelatedInventoryItem.inventoryID, 
          NotEqual<Current<InventoryItem.inventoryID>>>>> 
         relatedItems; 
0

@DChhapgar是的,我有DependOnGrid正確設置。這裏的所有相關代碼:

<px:PXDSCallbackCommand Name="ViewRelatedItems" Visible="true" DependOnGrid="relatedItemsGridID" /></CallbackCommands> 
.... 
    <px:PXTabItem Text="Related Items"> 
    <Template> 
     <px:PXGrid runat="server" ID="relatedItemsGridID" SkinID="DetailsInTab" Width="100%" SyncPosition="True" DataSourceID="ds" > 
      <Levels> 
       <px:PXGridLevel DataMember="relatedItems"> 
        <Columns> 
         <px:PXGridColumn DataField="InventoryCD" Width="100" LinkCommand="ViewRelatedItems"/> 
         <px:PXGridColumn DataField="InventoryID" Width="100" /> 
         <px:PXGridColumn DataField="ItemClassID" Width="100" /> 
         <px:PXGridColumn DataField="Descr" Width="200" /> 
         <px:PXGridColumn DataField="ItemStatus" Width="100" /> 
         <px:PXGridColumn DataField="ItemType" Width="100" /> 
         <px:PXGridColumn DataField="KitItem" Width="60" /></Columns> 
        </px:PXGridLevel></Levels> 
      <AutoSize Enabled="True" MinHeight="200" /> 
      <Mode AllowAddNew="False" AllowDelete="False" AllowUpdate="False" /></px:PXGrid></Template></px:PXTabItem> 
.... 

使用PXSelectorAllowEdit的作品,但我想改變的項目在同一個頁面,因此,最好的用戶會點擊該項目時,庫存ID /庫存CD標題中的字段將填充單擊的項目,並提交更改。

+0

我已更新原始答案。 – DChhapgar