Acumatica 选择行时修改过滤后的数据网格

Acumatica 选择行时修改过滤后的数据网格,acumatica,Acumatica,我有一个处理页面,其中可能包含多个具有公共id值的行。选择一行后,我希望取消选择并禁用具有相同id值的所有其他行。同样,如果取消选择该行,我希望重新启用具有相同id的所有其他行。我知道我需要使用RowUpdate事件,但我不知道如何附加到网格的缓存。感谢您的帮助 public void EDIOrder_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e) { EDIOrder row = (EDIOrder)e.

我有一个处理页面,其中可能包含多个具有公共id值的行。选择一行后,我希望取消选择并禁用具有相同id值的所有其他行。同样,如果取消选择该行,我希望重新启用具有相同id的所有其他行。我知道我需要使用RowUpdate事件,但我不知道如何附加到网格的缓存。感谢您的帮助

    public void EDIOrder_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
    {
        EDIOrder row = (EDIOrder)e.Row;
        if (row != null)
        {
            // attach to cache and update other rows with same id
        }
    }

我也遇到过类似的情况,属于相同支出的PayoutDetail记录需要保持同步。我为事件处理选择了字段_Updated以选择或取消选择类似记录:

    protected virtual void RCPayoutDetail_Selected_FieldUpdated(
            PX.Data.PXCache cache, PX.Data.PXFieldUpdatedEventArgs e)
    {
        RCPayoutDetail row = (RCPayoutDetail)e.Row;

        if (row != null)
        {
             // keep all Payouts in synch
            foreach (RCPayoutDetail rec in this.Records.Select())
            {
                if (rec.RCPayoutID == row.RCPayoutID &&
                        row.RCPayoutDetailID != rec.RCPayoutDetailID)
                {
                    cache.SetValue<RCPayoutDetail.selected>(rec, row.Selected);
                }
            }

           this.Records.View.RequestRefresh();
        }
    }
protected virtual void RCPayoutDetail\u Selected\u FieldUpdated(
PX.Data.PXCache缓存,PX.Data.PXFieldUpdatedEventArgs e)
{
RCPayoutDetail行=(RCPayoutDetail)e.row;
如果(行!=null)
{
//保持所有支出同步
foreach(此.Records.Select()中的RCPayoutDetail记录)
{
如果(rec.RCPayoutID==row.RCPayoutID&&
row.RCPayoutDetailID!=rec.RCPayoutDetailID)
{
cache.SetValue(rec,row.Selected);
}
}
this.Records.View.RequestRefresh();
}
}
对于启用/禁用,请尝试添加:

PXUIFieldAttribute.SetEnabled<RCPayoutDetail.selected>(
    cache, rec, !(bool)row.Selected);

// optional, see RowSelected comments and changes suggested below 
cache.SetStatus(rec, row.Selected == true ? 
    PXEntryStatus.Notchanged : PXEntryStatus.Modified); 
PXUIFieldAttribute.SetEnabled(
缓存、记录、!(布尔)行。选中);
//可选,请参阅下面建议的选定注释和更改
cache.SetStatus(rec,row.Selected==true?
PXEntryStatus.Notchanged:PXEntryStatus.Modified);
在处理页面中,如果要禁用整行,但仅在RowSelected期间启用选定字段,则将以下“如果”行添加到RowSelected,以便与行的状态相互作用:

    protected virtual void RCPayoutDetail_RowSelected(PX.Data.PXCache cache, PX.Data.PXRowSelectedEventArgs e)
    {
        RCPayoutDetail row = (RCPayoutDetail)e.Row;

        if (row != null)
        {
            //Set Row Enabled = false
            PXUIFieldAttribute.SetEnabled(cache, e.Row, false);

            // optional if line, otherwise always enable Selected
            if(cache.GetStatus(row) == PXEntryStatus.Updated || row.Selected == null)        
            PXUIFieldAttribute.SetEnabled<RCPayoutDetail.selected>(
                  cache, row, true);
        }
    }
protected virtual void RCPayoutDetail_row选中(PX.Data.PXCache缓存,PX.Data.PXRowSelectedEventArgs e)
{
RCPayoutDetail行=(RCPayoutDetail)e.row;
如果(行!=null)
{
//设置行已启用=false
PXUIFieldAttribute.SetEnabled(缓存,如行,false);
//如果行为可选,否则始终启用选定
if(cache.GetStatus(row)==PXEntryStatus.Updated | | row.Selected==null)
PXUIFieldAttribute.SetEnabled(
缓存,行,true);
}
}

谢谢您提供详细信息!在第一个代码块中,我假设RoyRecords是过滤数据网格的类,对吗?这就是我不确定的部分——如何连接到网格的缓存。更改缓存后是否需要使用RequestRefresh更新屏幕?我发现RequestRefresh很有用,是的。我编辑了代码块,Records是过滤数据网格的视图。