using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Drawing;
namespace BrowseCli
{
public class Customizer :
MercatorUi.ICustomizers.IStringUpdater,
MercatorUi.ICustomizers.IFormLoadCustomizer,
MercatorUi.ICustomizers.IFormClosedCustomizer,
MercatorUi.ICustomizers.IFormGridCustomizer
{
/*
* Cette première méthode est l'implémentation de l'interface IStringUpdater.
* Elle permet de modifier directement la requête SQL que Mercator se propose d'exécuter par défaut.
* On ajoute simplement le champ C_SOLDE dans la liste de champs du select de la requête
*/
public string StringUpdate(string StringToModify)
{
StringToModify = StringToModify.Replace(" from CLI", ",C_SOLDE from CLI");
return StringToModify;
}
/*
* Cette deuxième méthode est l'implémentation de l'interface IFormLoadCustomizer.
* Comme cette méthode reçoit en paramètre un Form (fenêtre de base - car on peut utiliser cette interface pour divers écrans),
* il faut d'abord effectuer un cast Form -> SigBrowseForm
* Ce code ajoute un évènement CellFormatting sur le dataGridView.
*/
public void FormLoadCustomize(Form WindowsForm)
{
MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
SigBrowseForm.dataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView_CellFormatting);
}
public void FormClosedCustomize(Form WindowsForm)
{
MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
SigBrowseForm.dataGridView.CellFormatting -= new DataGridViewCellFormattingEventHandler(dataGridView_CellFormatting);
}
/*
* Cette méthode est l'implémentation de l'interface IFormGridCustomizer
* Elle ajoute la colonne c_solde au datagridview
*/
public void FormGridCustomize(Form WindowsForm)
{
MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
SigBrowseForm.dataGridView.Columns.Add("c_solde", "");
SigBrowseForm.dataGridView.Columns["c_solde"].DataPropertyName = "c_solde";
SigBrowseForm.dataGridView.Columns["c_solde"].Visible = false;
}
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridView dataGridView = (DataGridView)sender;
if (dataGridView.Columns.Contains("c_solde") // lorsque l'on rafraîchit la grille, les colonnes sont recréées. Pendant ce temps, la colonne n'existe plus.
&& (dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value != DBNull.Value)) // on vérifie que ce n'est pas une ligne de rupture qui ne contient pas de valeur
{
double solde = System.Convert.ToDouble(dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value);
if (solde < -5000) // en négatif, car un solde débiteur est négatif
e.CellStyle.ForeColor = Color.Red;
}
}
}
}