Wijzigen van een memo in de lijnen van een commercieel beheersdocument

0000002247     -      10-11-2023

Het kan worden geïmplementeerd zonder te programmeren:

  • voeg de kolom toe zoals hieronder weergegeven,
  • voeg in de Columns van de LinesEditor een kolom toe waarvan de source MEMO is,
  • voeg in de ColumnsRules van de LinesEditor een regel toe waarvan Name = MEMO en Editor = Memo of Html.

 

De hieronder gedocumenteerde ontwikkeling is achterhaald. 


Dit voorbeeld toont hoe een memo in de lijnen van een aan- of verkoopdocument van het commercieel management beheerd kan worden. Dit gebeurt door een kolom van knoppen toe te voegen aan de LinesEditor. De tekst van deze knop ziet er als volgt uit:

  • Memo indien de memo niet leeg is
  • memo indien de memo leeg is

memo_lines


De MEMO kolom moet in de database worden aangemaakt:
Voor de verkopen:

alter table LIGNES_V add MEMO varchar(MAX) not null default ''

Voor de aankopen:

alter table LIGNES_A add MEMO varchar(MAX) not null default ''

Deze programmering gebeurt aan de hand van een Billing-customizer die de volgende interfaces implementeert:

De code wordt als volgt samengesteld:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded += BillingEngine_BillingFormLoaded;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded -= BillingEngine_BillingFormLoaded;
        }

        void BillingEngine_BillingFormLoaded(object sender, EventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (billingEngine.BillingForm.LinesEditor != null)
            {
                MercatorUi.GridPro.DataGridViewHidableButtonXColumn colButtonMemo = new MercatorUi.GridPro.DataGridViewHidableButtonXColumn();
                colButtonMemo.Name = "ButtonMemo";
                colButtonMemo.HeaderText = "";
                colButtonMemo.Width = 50;
                colButtonMemo.BeforeCellPaint += new EventHandler<DevComponents.DotNetBar.Controls.BeforeCellPaintEventArgs>(colButtonMemo_BeforeCellPaint);
                billingEngine.BillingForm.LinesEditor.Grid.Columns.Add(colButtonMemo);
                billingEngine.BillingForm.LinesEditor.Grid.CellSuperClick += new MercatorUi.GridPro.CellSuperClickHandler(Grid_CellSuperClick);
            }
        }

        void colButtonMemo_BeforeCellPaint(object sender, DevComponents.DotNetBar.Controls.BeforeCellPaintEventArgs e)
        {
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1))
            {
                MercatorUi.GridPro.DataGridViewHidableButtonXColumn colButtonMemo = (MercatorUi.GridPro.DataGridViewHidableButtonXColumn)sender;
                DataTable dt = (DataTable)colButtonMemo.DataGridView.DataSource;
                if (dt.Rows[Api.DataGridViewRowToDataTableRowIndex(colButtonMemo.DataGridView.Rows[e.RowIndex])]["memo"].ToString() != "")
                    colButtonMemo.DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Api.Iif_langue(Globals.Langue, "Merkz.", "Memo", "Memo", "Mémo");
                else
                    colButtonMemo.DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Api.Iif_langue(Globals.Langue, "merkz.", "memo", "memo", "mémo");
            }
        }

        void Grid_CellSuperClick(object sender, DataGridViewCellEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.ColumnIndex < 0 || e.RowIndex < 0) || (grid.Columns[e.ColumnIndex].Name != "ButtonMemo"))
                return;

            DataTable dt = (DataTable)grid.DataSource;
            DataRow currentRow = dt.Rows[Api.DataGridViewRowToDataTableRowIndex(grid.Rows[e.RowIndex])];

            string memo = Dialogs.AskMemo(string.Format("Memo ligne {0} ?", e.RowIndex + 1), currentRow["memo"].ToString(), grid.FindForm());
            if (!dt.Columns["memo"].ReadOnly && (memo != null)) // on n'a pas cliqué sur "Annuler"
                currentRow["memo"] = memo.Trim();
        }
    }
}

Indien u een HTML-content wenst in te geven in plaats van een gewone memo, dan vervangt u de volgende lijn

Zoom
string memo = Dialogs.AskMemo(string.Format("Memo lijn {0}?", e.RowIndex + 1), dt.Rows[e.RowIndex]["memo"].ToString(), grid.FindForm());

door

Zoom
string memo = Dialogs.AskHtml(string.Format("Memo lijn {0}?", e.RowIndex + 1), dt.Rows[e.RowIndex]["memo"].ToString(), grid.FindForm());