Acumatica PXGrid PXDropDown值更改不会更新缓存

时间:2019-01-31 21:19:33

标签: c# asp.net acumatica

仅当更改网格行选择时,才通知缓存有关行中字段的修改。 我有一个在行中具有一个可编辑记录的网格:KiwiSaver状态: enter image description here 我在事件row_selected中添加了验证错误并控制了“保存和导出”按钮的启用/禁用状态:

    protected virtual void MPNewDepartingEmployeesBatchItem_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {
        var row = e.Row as MPNewDepartingEmployeesBatchItem;

        if (row.IsNull()) return;

        AllEmployeesTransactions.Cache.RaiseExceptionHandling<MPNewDepartingEmployeesBatchItem.kiwiSaverStatus>(
            row, row.KiwiSaverStatus,
            string.IsNullOrEmpty(row.KiwiSaverStatus)
                ? new PXSetPropertyException("KiwiSaver Status is not specified.", PXErrorLevel.Error)
                : null);

        SaveAndExportBatchAction.SetEnabled(!(cache.Inserted.Cast<MPNewDepartingEmployeesBatchItem>().Any(a => string.IsNullOrEmpty(a.KiwiSaverStatus)) ||
                                              cache.Updated.Cast<MPNewDepartingEmployeesBatchItem>().Any(a => string.IsNullOrEmpty(a.KiwiSaverStatus))));

    }

此事件仅在选择更改时引发,而在我在下拉菜单中更改项目时直接引发。意味着,要应用更改,用户必须更改选择。 网格中的选择更改后,我尝试过的所有事件也引发了。例如:

public virtual void MPNewDepartingEmployeesBatchItem_KiwiSaverStatus_FieldUpdated(PXCache cache,
        PXFieldUpdatedEventArgs e)
    {

    }

    public virtual void MPNewDepartingEmployeesBatchItem_KiwiSaverStatus_FieldUpdating(PXCache cache,
        PXFieldUpdatingEventArgs e)
    {

    }

    protected virtual void MPNewDepartingEmployeesBatchItem_KiwiSaverStatus_FieldVerifying(
        PXCache sender, PXFieldVerifyingEventArgs e)
    {

    }

我的网格如下:

 <px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100" AutoAdjustColumns="True"
    Width="100%" Height="150px" SkinID="PrimaryInquire" TabIndex="100" AllowShowHide="Server" StatusField="ErrorMessage"
    AllowSearch="True" FastFilterFields="Surname,Firstname,IRDNumber" RestrictFields="True" SyncPosition="True">


    <AutoSize Container="Window" Enabled="True" MinHeight="200" />
    <Levels>
        <px:PXGridLevel DataMember="AllEmployeesTransactions" Key="IRBatchItemID">
            <RowTemplate>
                <px:PXTextEdit ID="Surname" runat="server" DataField="Surname" />
                <px:PXTextEdit ID="MiddleName" runat="server" DataField="MiddleName" />
                <px:PXTextEdit ID="EmployeeTitle" runat="server" DataField="EmployeeTitle" />
                <px:PXTextEdit ID="IRDNumber" runat="server" DataField="IRDNumber" />
                <px:PXTextEdit ID="BranchCD" runat="server" DataField="BranchCD" />
                <px:PXTextEdit ID="TaxCode" runat="server" DataField="TaxCode" />
                <px:PXTextEdit ID="EmployeeDOBDateTime1" runat="server" DataField="EmployeeDOBDateTime" />
                <px:PXTextEdit ID="EmployeeStartDate" runat="server" DataField="EmployeeStartDate" />
                <px:PXTextEdit ID="EmployeeEndDate" runat="server" DataField="EmployeeEndDate" />
                <px:PXDropDown ID="KiwiSaverStatus" runat="server"
                    DataField="KiwiSaverStatus"
                    CommitChanges="True" />
                <px:PXTextEdit ID="EmailAddress" runat="server" DataField="EmailAddress" />
                <px:PXTextEdit ID="MobilePhoneNumber" runat="server" DataField="MobilePhoneNumber" />
                <px:PXTextEdit ID="DaytimePhoneNumber" runat="server" DataField="DaytimePhoneNumber" />
                <px:PXTextEdit ID="Country" runat="server" DataField="Country" />
                <px:PXTextEdit ID="StreetName" runat="server" DataField="StreetName" />
                <px:PXTextEdit ID="City" runat="server" DataField="City" />
                <px:PXTextEdit ID="PostCode" runat="server" DataField="PostCode" />
                <px:PXTextEdit ID="State" runat="server" DataField="State" />
            </RowTemplate>
            <Columns>

                <px:PXGridColumn DataField="Surname" LinkCommand="payDetailsAction" />
                <px:PXGridColumn DataField="Firstname" />

                <px:PXGridColumn DataField="MiddleName">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="EmployeeTitle">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="IRDNumber">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="BranchCD">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="TaxCode">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="EmployeeDOBDateTime">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="EmployeeStartDate">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="EmployeeEndDate">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="KiwiSaverStatus"
                    Type="DropDownList"
                    CommitChanges="True">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="EmailAddress">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="MobilePhoneNumber">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="DaytimePhoneNumber">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="Country">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="StreetName">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="City">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="PostCode">
                </px:PXGridColumn>
                <px:PXGridColumn DataField="State">
                </px:PXGridColumn>

            </Columns>
        </px:PXGridLevel>
    </Levels>

    <ActionBar ActionsText="False" DefaultAction="payDetailsAction">
        <Actions>
            <AddNew MenuVisible="false" ToolBarVisible="false"></AddNew>
            <Delete MenuVisible="false" ToolBarVisible="false"></Delete>
            <Refresh MenuVisible="False" ToolBarVisible="False"></Refresh>
        </Actions>
        <CustomItems>
            <px:PXToolBarButton Text="View Pay Details" Key="payDetailsAction" Tooltip="View pay details the currently selected employee" Visible="False">
                <AutoCallBack Command="PayDetailsAction" Target="ds">
                </AutoCallBack>
            </px:PXToolBarButton>
        </CustomItems>
    </ActionBar>
    <Mode AllowAddNew="false" AllowDelete="false" />
</px:PXGrid>

我该怎么做才能通知我的图形该行中的记录已直接更改? 例如在WPF中,我们有UpdateSourceTrigger =“ PropertyChanged”

我将非常感谢您提供任何建议。

2 个答案:

答案 0 :(得分:0)

在页面PXGrid中可能需要SyncPosition =“ True”

答案 1 :(得分:0)

我找到了解决方案。它不会导致在选择后立即引发事件,但是当您单击“保存并导出”按钮时,缓存已经知道该字段已更改了而没有更改网格行的选择。 您需要定义:

  1. SyncPosition="True"在数据网格中
  2. [PXButton(CommitChanges = true)]在按钮操作实现中