Plaats automatisch een pauze en totalen in een gepersonaliseerde grid van een informatiebestand

0000002306     -      09-01-2023

Deze pagina is verouderd. Met Mercator kunt u een pauze toevoegen zonder code: deze pagina bekijken.


Het domein hier staat toe om met code een pauze te plaatsen in een gepersonaliseerde grid van een informatiebestand (MercatorUi.Forms.Sig.SigGrids.UserDefined) en bereken het totaal van een kolom met behulp van die pauze.

Het resultaat is het volgende:

Dit programma is rond een SigCli customizer gebouwd die de MercatorUi.ICustomizers.IFormLoadCustomizer en MercatorUi.ICustomizers.IFormClosedCustomizer interfaces implementeert. Dit staat ons toe om het AfterColumnsCreated evenement te gebruiken in het rooster. Een verwijzing naar UserDefineGrid wordt verkregen door middel van zijn ID (te wijzigen in de code).

Een grid van een informatiebestand biedt standaard geen pauze functies. Om de deze te activeren moet men:

  • De AllowRupture eigenschap in het raster op true zetten. Deze eigenschap kan enkel aangepast worden zolang de DataSource van dat raster nog niet vastgesteld is. Wat niet het geval is in dit stadium van het rooster in Mercator. Daarom moet men het grid.DataSource = null; commando voorzien en de DataSource herstellen.
  • Om een pauze te machtigen moet men een specifieke kolom gebruiken: MercatorUi.GridPro.RupturableDataGridViewTextBoxColumn. Daarom verwijderen we alle bestaande kolomen door grid.Columns.Clear(). Deze kolommen worden vervolgens opnieuw gemaakt door de code.
  • De twee lijnen die beginnen met grid.RuptureCalculationColumnsList staan ons toe om een totaal te berekenen in de tweede kolom na de pauze.
  • In dezelfde kolom moet de pauze een DBNull waarde in zijn header lijn kunnen brengen. Dit wordt toegestaan door dit commando:  dt.Columns["temps"].AllowDBNull = true;

We eindigen onze code op een asynchrone manier (met een TimerOneShot), door de pauze te starten op de eerste kolom.

De code van deze customizer is de volgende:

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

namespace SigCli
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public void FormLoadCustomize(Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            MercatorUi.MovableControls.MovableGrid userDefinedGrid = (MercatorUi.MovableControls.MovableGrid)sigForm.MovableControls["2834DF4A76"];
            userDefinedGrid.AfterColumnsCreated += new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(userDefinedGrid_AfterColumnsCreated);
        }

        public void FormClosedCustomize(Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            MercatorUi.MovableControls.MovableGrid userDefinedGrid = (MercatorUi.MovableControls.MovableGrid)sigForm.MovableControls["2834DF4A76"];
            userDefinedGrid.AfterColumnsCreated -= new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(userDefinedGrid_AfterColumnsCreated);
        }

        void userDefinedGrid_AfterColumnsCreated(object sender, EventArgs e)
        {
            MercatorUi.MovableControls.MovableGrid userDefinedGrid = (MercatorUi.MovableControls.MovableGrid)sender;
            MercatorUi.GridPro.DataGridViewXPro grid = userDefinedGrid.Grid;
            grid.Columns.Clear();
            DataTable dt = (DataTable)grid.DataSource;
            dt.Columns["temps"].AllowDBNull = true;
            grid.DataSource = null;
            grid.AllowRupture = true;
            grid.DataSource = dt;
            grid.Columns.Add(new MercatorUi.GridPro.RupturableDataGridViewTextBoxColumn("titre", "Titre"));
            grid.Columns["titre"].Width = 100;
            grid.Columns["titre"].DataPropertyName = "titre";

            grid.Columns.Add("temps", "Temps");
            grid.Columns["temps"].Width = 80;
            grid.Columns["temps"].DataPropertyName = "temps";
            grid.Columns["temps"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

            grid.RuptureCalculationColumnsList = new List<MercatorUi.GridPro.DataGridViewColumnForRuptureCalculation>();
            grid.RuptureCalculationColumnsList.Add(new MercatorUi.GridPro.DataGridViewColumnForRuptureCalculation(grid.Columns["temps"], MercatorUi.GridPro.RuptureCalculations.Sum, grid.Columns["titre"]));

            MercatorUi._BaseClasses.TimerOneShot timer = new MercatorUi._BaseClasses.TimerOneShot(timer_Tick, grid);
        }

        void timer_Tick(object sender, EventArgs e)
        {
            MercatorUi._BaseClasses.TimerOneShot timer = (MercatorUi._BaseClasses.TimerOneShot)sender;
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)timer.Tag;
            grid.PlaceRupture(grid.Columns["titre"]);
        }


    }
}