Smartpanel 文本不刷新

Smartpanel text do not refresh

我在我的自定义智能面板上显示了几个文本框。要显示的文本通过单击网格中的每一行获得并显示在智能面板上。

但是,问题是每当我第一次点击任何一行时,它会正确显示所有文本,但下一次它仍然显示前一个并且不会刷新。

这是我使用的代码-

public PXSelect<CRAcumaticaActivity,
        Where<CRAcumaticaActivity.activityID, Equal<Current<CRAcumaticaActivity.activityID>>>> CurrentAcuViewActivity;

public PXAction<CRCase> acuViewActivity;

    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.ArrowUp, CommitChanges = false)]
    [PXUIField(DisplayName = "View Activity", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
    protected virtual IEnumerable AcuViewActivity(PXAdapter adapter)
    {
        CurrentAcuViewActivity.AskExt();

        return adapter.Get();
    }

这是smartpanel aspx代码-

<px:PXSmartPanel ID="pnlAcuViewActivity" runat="server" Style="z-index: 108;"
    Caption="Acumatica Activity" CaptionVisible="True" LoadOnDemand="true"
    ShowAfterLoad="true" AutoCallBack-Command="Refresh"  Key="CurrentAcuViewActivity"
    AutoCallBack-Target="frmAcuViewActivity" DesignView="Content"
    AcceptButtonID="PXButtonOK" CancelButtonID="PXButtonOK">
    <px:PXFormView ID="frmAcuViewActivity" runat="server" DataSourceID="ds"  DataMember="CurrentAcuViewActivity"
        Style="z-index: 100"
        Caption="Acumatica Activity" CaptionVisible="False"
        SkinID="Transparent" TabIndex="17100">
        <Template>
            <px:PXLayoutRule runat="server" StartRow="True">
            </px:PXLayoutRule>
            <px:PXTextEdit ID="edSummary" runat="server" DataField="Summary" Enabled="false">
            </px:PXTextEdit>
            <px:PXRichTextEdit ID="edDescription" runat="server" DataField="Description" Height="200px" Width="500px">
            </px:PXRichTextEdit>
        </Template>
    </px:PXFormView>
    <px:PXPanel ID="PXPanel1" runat="server" SkinID="Buttons">
        <px:PXButton ID="pxBtnOK" runat="server" DialogResult="OK" Text="Close" />
    </px:PXPanel>
</px:PXSmartPanel>

有没有我遗漏的东西。请提出建议。

您是否设置了网格的 SyncPosition = true?

The SyncPosition property of a grid enables setting the Current property of the cache object to each row selected by the user in the grid. This property is required for syncing the lookup lists with the currently selected row in the grid, if the data displayed in the lookup depends on the selected row.

如果仍然无法正常工作,请尝试使用委托为每个 select 清除相关视图的缓存。

未测试

public PXSelect<CRAcumaticaActivity,
        Where<CRAcumaticaActivity.activityID, Equal<Current<CRAcumaticaActivity.activityID>>>> CurrentAcuViewActivity;
 protected virtual IEnumerable currentAcuViewActivity()
{
  CurrentAcuViewActivity.Cache.Clear();
  return CurrentAcuViewActivity.Select();
}

对于您的智能面板,您为什么拥有: 加载后显示, AutoCallBack-* 和 AcceptButtonID/CancelButtonID 设置为相同的按钮?

ShowAfterLoad 属性 控制面板加载期间的显示。 AutoCallBack 属性适用于面板上控件生成的任何回调

我建议按如下方式声明您的智能面板:注意,AutoRepaint 属性 会强制面板在每次打开时重新绘制。

<px:PXSmartPanel ID="pnlAcuViewActivity" runat="server" Style="z-index: 108;"
Caption="Acumatica Activity" CaptionVisible="True" LoadOnDemand="true"
 Key="CurrentAcuViewActivity"
AcceptButtonID="PXButtonOK" 
AutoRepaint="true">

我能想到的另一件事是你应该确保不要在多个容器中使用相同的数据视图。

要刷新 SmartPanel 中的数据,您应该使用 AskExt(PXView.InitializePanel initializeHandler, bool refreshRequired); 代码将如下所示:

          if (CurrentAcuViewActivity.AskExt(
            (graph, view) =>
            {
                CurrentAcuViewActivity.Cache.ClearQueryCache();
                CurrentAcuViewActivity.View.Clear();
                CurrentAcuViewActivityCache.Clear();
            }
            , true) != WebDialogResult.OK)
          return adapter.Get();