From AutoCount Resource Center


OnFormInitialize is triggered when a form is generating.
Form Caching
OnFormInitialize is not triggered when the form is loaded from the cache (temporary stored in memory).
Most of the entry forms have built-in Caching capability.
When the form is loaded from cache after first time loaded, it does not require to be reinitialized.
Hence, OnFormInitialize event is not trigger.
Tab Pages
User Defined Field has not been created at OnFormInitialize event.
UDF is created in OnDataBinding.
  • There are times when user wants refresh the form caching without re-login AutoCount Accounting, user can go to
Tools | Clear Cache & Criteria Data
and click [Clear Form Cache] button.


There are many usage for this event, because the event arguments contain properties from User Interface to Invoice Entity.

  • Access GridView on the Form
  • Add User Button
  • Reallocate component's location
  • Add addition User Access Control to components (button, textedit, lookupedit, etc.)
  • Some function requires combination of OnDataBinding event to work properly
    eg. Create a TextEdit in OnFormInitialize, and add DataBindings of table column to TextEdit in OnDataBinding.

OnFormInitialize event in Sales Invoice

public void OnFormInitialize(BCE.AutoCount.Invoicing.Sales.Invoice.FormInvoiceEntry.FormInitializeEventArgs e)


Access GridView on the form

public void OnFormInitialize(BCE.AutoCount.Invoicing.Sales.Invoice.FormInvoiceEntry.FormInitializeEventArgs e)
    //Use 'e' to retrieve GridView in the GridControl
    DevExpress.XtraGrid.Views.Grid.GridView gridView = (DevExpress.XtraGrid.Views.Grid.GridView)e.GridControl.DefaultView;

GridControl holds the object BaseView. The hierarchy of BaseView is the base class of:

  • GridView
  • LayoutView
  • CardView
  • WinExplorerView
  • TileView

We know the GridControl.DefaultView is a GridView.
Therefore, we can cast the object of DefaultView to DevExpress.XtraGrid.Views.Grid.GridView.

Add a button to prompt a message to display Debtor's Outstanding and Last Payment Amount

Add using Directive

using BCE.Data;
using BCE.AutoCount.Invoicing.Sales.Invoice;
using DevExpress.XtraEditors;
public void OnFormInitialize(FormInvoiceEntry.FormInitializeEventArgs e)
    //Use anonymous method to pass DBSetting and Invoice Object to Click Event
    EventHandler debtorInfoClickHandler = (s, args) => BtnDebtorInfo_Click(e.DBSetting, e.Invoice);
    SimpleButton btnDebtorInfo = CreateButtonDebtorInfo();
    btnDebtorInfo.Click -= debtorInfoClickHandler;
    btnDebtorInfo.Click += debtorInfoClickHandler;

private void BtnDebtorInfo_Click(DBSetting dbSetting, Invoice iv)
    BCE.Application.AppMessage.ShowMessage(GetDebtorInfoMessage(dbSetting, iv));

private string GetDebtorInfoMessage(DBSetting dbSetting, Invoice iv)
    decimal outstanding = iv.SalesCreditControl.AROutstanding;
    return string.Format("{0}\nOutstanding:{1}",
        LastPaymentMessage(iv.DebtorCode, dbSetting),

private string LastPaymentMessage(string debtorCode, DBSetting dbSetting)
    string sqlSelect = "SELECT TOP 1 CONCAT(DocNo, '\n'"
        + ", Format(DocDate,'dd/MM/yyyy')"
        + ", '\n', COALESCE(PaymentAmt, 0)) AS [DebtorInfo]"
        + " FROM ARPayment"
        + " WHERE Cancelled = 'F' AND DebtorCode = ?"
        + " ORDER BY DocDate DESC";
    object obj = dbSetting.ExecuteScalar(sqlSelect, debtorCode);

    return (obj == null)
        ? "No Payment Found."
        : string.Format("Last Payment:\n{0}", obj.ToString());

private SimpleButton CreateButtonDebtorInfo()
    DevExpress.XtraEditors.SimpleButton btn = new DevExpress.XtraEditors.SimpleButton();
    btn.Text = "Show Debtor Info";
    btn.Size = new System.Drawing.Size(200, 35);
    btn.Location = new System.Drawing.Point(480, 210);
    return btn;

See Also

Go to menu

Go to top
Resources For AutoCount Software Developers