I can see the “+” symbol but it’s disabled which doesn’t make sense since I added the Mode (AllowAddNew). I can add rows in SQL and they show up fine but I can’t edit the values or add new rows in the new customized screen.
Question: do I need to create an Action bar to create rows or edit existing rows?

I defined my HTML like this…
<%@ Page Language="C#" MasterPageFile="~/MasterPages/ListView.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="IN400628.aspx.cs" Inherits="Page_IN400628" Title="Untitled Page" %>
<%@ MasterType VirtualPath="~/MasterPages/ListView.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" Runat="Server">
<px:PXDataSource SkinID="Primary" ID="ds" runat="server" Visible="True" Width="100%"
TypeName="updateInventory.INItemClassRulesSetupMaint" PrimaryView="Records"
>
<CallbackCommands>
<px:PXDSCallbackCommand Name="Save" CommitChanges="True" ></px:PXDSCallbackCommand>
<px:PXDSCallbackCommand Name="DeleteAll" Visible="true" CommitChanges="true" ></px:PXDSCallbackCommand>
</CallbackCommands>
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phL" runat="Server">
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Width="100%" Height="150px"
AllowPaging="True" AllowSearch="true" AdjustPageSize="Auto"
SkinID="Primary" AllowAutoHide="false" SyncPosition="true" MatrixMode="true">
<Levels>
<px:PXGridLevel DataMember="Records">
<RowTemplate>
<px:PXSelector ID="edItemClass" runat="server" DataField="ItemClassID" AutoRefresh="True"></px:PXSelector>
</RowTemplate>
<Columns>
<px:PXGridColumn DataField="ItemClassID" Width="70" />
<px:PXGridColumn DataField="PrintPriceOnLabel" Type="CheckBox"></px:PXGridColumn>
<px:PXGridColumn DataField="LabelsPerUnit" CommitChanges="true"></px:PXGridColumn></Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
<Mode AllowAddNew="true" />
<ActionBar >
</ActionBar>
</px:PXGrid>
</asp:Content>
Here’s my DAC:
[Serializable]
public class INItemClassRulesSetup : PXBqlTable, IBqlTable
{
public class PK : PrimaryKeyOf<INItemClassRulesSetup>.By<itemClassID>
{
public static INItemClassRulesSetup Find(PXGraph graph, int? itemClassID) => FindBy(graph, itemClassID);
}
//public static class FK
//{
// public class ItemClass : PrimaryKeyOf<INItemClass>.By<INItemClass.itemClassID>.ForeignKeyOf<ItemClassRulesSetup>.By<ItemClassRulesSetup> { }
//}
/// <summary>
/// Item Class ID for rule
/// </summary>
[PXDBIdentity(IsKey = true)]
[PXUIField(DisplayName = "Item Class")]
[PXSelector(typeof(SearchFor<INItemClass.itemClassID>.Where<INItemClass.itemClassCD.IsNotEqual<Empty>>), DescriptionField = typeof(itemClassID))]
public virtual int? ItemClassID { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class itemClassID : BqlInt.Field<itemClassID> { }
/// <summary>
/// Default location code
/// </summary>
[PXBool]
[PXDefault(false)]
[PXUIField(DisplayName = "Print Price On Label")]
public virtual bool? PrintPriceOnLabel { get; set; }
public abstract class printPriceOnLabel : PX.Data.BQL.BqlBool.Field<printPriceOnLabel> { }
/// <summary>
/// Warehouse sequence for the state
/// </summary>
[PXDBInt]
[PXDefault]
[PXUIField(DisplayName = "LabelsPerUnit", Required = true)]
public virtual int? LabelsPerUnit { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class labelsPerUnit : BqlInt.Field<labelsPerUnit> { }
#region Default control fields - without Noteid
[PXDBCreatedByID]
public virtual Guid? CreatedByID { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class createdByID : BqlGuid.Field<createdByID> { }
[PXDBCreatedByScreenID]
public virtual string CreatedByScreenID { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class createdByScreenID : BqlString.Field<createdByScreenID> { }
[PXDBCreatedDateTime]
public virtual DateTime? CreatedDateTime { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class createdDateTime : BqlDateTime.Field<createdDateTime> { }
[PXDBLastModifiedByID]
public virtual Guid? LastModifiedByID { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class lastModifiedByID : BqlGuid.Field<lastModifiedByID> { }
[PXDBLastModifiedByScreenID]
public virtual string LastModifiedByScreenID { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class lastModifiedByScreenID : BqlString.Field<lastModifiedByScreenID> { }
[PXDBLastModifiedDateTime]
public virtual DateTime? LastModifiedDateTime { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class lastModifiedDateTime : BqlDateTime.Field<lastModifiedDateTime> { }
[PXDBTimestamp]
[PXUIField(DisplayName = "Tstamp")]
public virtual byte[] Tstamp { get; set; }
[SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "DAC field BQL class uses same name with different case")]
public abstract class tstamp : BqlByteArray.Field<tstamp> { }
#endregion
}








