user3857731
user3857731

Reputation: 659

How to conditionally hide PXPanel inside an Acumatica screen?

I have the following use case:

Acumatica dropdown, which can have 2 or so values.

e.g.:

-If user selects option a, I need to show PXPanel(ID="panel1")

-If user selects option b, I need to show PXPanel(ID="panel2")

Those PXPanels are inside in one PXFormView, so they have one DataMember Like this :

       <px:PXFormView ID="form" runat="server" DataSourceID="ds" DataMember="Waybills">

               <px:PXPanel ID="panel1" ..
               <px:PXPanel ID="panel2" ..

    </px:PXFormView>

Is it possible to conditionally show/hide PXPanels?

As RuslanDev said I can achieve the same effect with PXLayoutRule(GroupCaption), but in that case I can't set caption to 100%, it's equal the first column's width.

With PXPanel :

enter image description here apsx :

   <px:PXPanel ID="panel3" runat="server" Caption="Buyer (Receiver)" RenderStyle="Fieldset" AlreadyLocalized="False" DataMember="" >

        <px:PXLayoutRule runat="server" StartRow="True" StartColumn="True" ColumnWidth="XM" />
        <px:PXSegmentMask CommitChanges="True" ID="edCustomerID" runat="server" DataField="CustomerID" DataSourceID="ds" />

        <px:PXLayoutRule runat="server" StartRow="True" StartColumn="True" ColumnWidth="XM" />
        <px:PXTextEdit ID="edRecipientTaxRegistrationID" runat="server" DataField="RecipientTaxRegistrationID" Enabled="False" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />
        <px:PXCheckBox ID="edRecipientIsForeignCitizen" runat="server" DataField="RecipientIsForeignCitizen"  AlreadyLocalized="False"  Enabled="false"/>

        <px:PXLayoutRule runat="server" StartColumn="True" ColumnWidth="XM" />
        <px:PXTextEdit ID="edRecipientName" runat="server" DataField="RecipientName" Enabled="False" AlreadyLocalized="False" DefaultLocale="" />


        <px:PXLayoutRule runat="server" StartColumn="True" ColumnWidth="XM" />
        <px:PXTextEdit ID="edRecipientDestinationAddress" runat="server" DataField="RecipientDestinationAddress" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />

    </px:PXPanel>

With PXLayoutRule :

enter image description here

apsx :

   <px:PXLayoutRule runat="server" StartRow="True" StartColumn="True"  GroupCaption="Buyer (Receiver)" StartGroup="true"  ColumnSpan="3"/>

                <px:PXLayoutRule runat="server"  StartColumn="True" ColumnWidth="XM" />

                <px:PXSegmentMask CommitChanges="True" ID="edCustomerID" runat="server" DataField="CustomerID" DataSourceID="ds" />

                <px:PXLayoutRule runat="server" StartRow="True" StartColumn="True" ColumnWidth="XM" />
                <px:PXTextEdit ID="edRecipientTaxRegistrationID" runat="server" DataField="RecipientTaxRegistrationID" Enabled="False" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />
                <px:PXCheckBox ID="edRecipientIsForeignCitizen" runat="server" DataField="RecipientIsForeignCitizen"  AlreadyLocalized="False"  Enabled="false"/>

                <px:PXLayoutRule runat="server" StartColumn="True" ColumnWidth="XM" />
                <px:PXTextEdit ID="edRecipientName" runat="server" DataField="RecipientName" Enabled="False" AlreadyLocalized="False" DefaultLocale="" />


                <px:PXLayoutRule runat="server" StartColumn="True" ColumnWidth="XM" />
                <px:PXTextEdit ID="edRecipientDestinationAddress" runat="server" DataField="RecipientDestinationAddress" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />

Upvotes: 0

Views: 318

Answers (2)

user3857731
user3857731

Reputation: 659

Using PXFormView instead of PXPanel solved all the problems.

Upvotes: 0

RuslanDev
RuslanDev

Reputation: 6778

There is no option to hide entire PXPanel from business logic, except conditionally setting Visible to true or false for each input control placed within a PXPanel:

protected virtual void ARFinCharge_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    ARFinCharge fin = e.Row as ARFinCharge;
    if (fin == null) return;

    PXUIFieldAttribute.SetVisible<ARFinCharge.fixedAmount>(cache, fin, fin.ChargingMethod == OverdueChargingMethod.FixedAmount);
    PXUIFieldAttribute.SetVisible<ARFinCharge.lineThreshold>(cache, fin, fin.ChargingMethod == OverdueChargingMethod.PercentWithThreshold);
    PXUIFieldAttribute.SetVisible<ARFinCharge.minFinChargeAmount>(cache, fin, fin.ChargingMethod == OverdueChargingMethod.PercentWithMinAmount);
}

For the PXLayoutRule approach, please use Aspx layout as below (the Customer selector has to span across the 3 columns underneath it):

<px:PXLayoutRule runat="server" StartRow="True" StartGroup="true" GroupCaption="Buyer (Receiver)" />
<px:PXSegmentMask CommitChanges="True" ID="edCustomerID" runat="server" DataField="CustomerID" />
<px:PXLayoutRule runat="server" Merge="True" />
<px:PXTextEdit ID="edRecipientTaxRegistrationID" Size="M" runat="server" DataField="RecipientTaxRegistrationID" Enabled="False" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />
<px:PXTextEdit ID="edRecipientName" runat="server" Size="M" DataField="RecipientName" Enabled="False" AlreadyLocalized="False" DefaultLocale="" />
<px:PXTextEdit ID="edRecipientDestinationAddress" Size="M" runat="server" DataField="RecipientDestinationAddress" CommitChanges="True" AlreadyLocalized="False" DefaultLocale="" />
<px:PXLayoutRule runat="server" Merge="False" />
<px:PXCheckBox ID="edRecipientIsForeignCitizen" runat="server" DataField="RecipientIsForeignCitizen"  AlreadyLocalized="False"  Enabled="false"/>
<px:PXLayoutRule runat="server" EndGroup="true" />

enter image description here

Upvotes: 1

Related Questions