using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
// <CompileWithRoslyn />
namespace Param
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.ISqlCommandUpdater
{
public void FormLoadCustomize(Form form)
{
if (form is MercatorUi.Forms.Param.ParamCategoriesForm paramCategoriesForm) // on est dans l'écran de paramétrage des catégories
{
foreach (MercatorUi.GridPro.DataGridViewXPro grid in paramCategoriesForm.Grids)
{
grid.Columns.Add("colLibLong", "Libellé long");
grid.Columns["colLibLong"].Width = 400;
grid.Columns["colLibLong"].DataPropertyName = "libLong";
grid.Columns["colLibLong"].SortMode = DataGridViewColumnSortMode.NotSortable;
}
}
}
public string StringUpdate(string stringToModify)
{
if (stringToModify.Contains("CAT_STCK"))
{
stringToModify = stringToModify.Replace("id,nom", "id,nom,libLong");
}
return stringToModify;
}
public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand sqlCommandToModify, Form form) // modification de la requête de sauvegarde des données
{
if (form is MercatorUi.Forms.Param.ParamCategoriesForm paramCategoriesForm) // on est bien dans l'écran de paramétrage des catégories
{
if (sqlCommandToModify.Parameters.Contains("@type"))
{
if (!sqlCommandToModify.CommandText.Contains("libLong")) // cette modification ne doit être effectuée qu'une seule fois. Ensuite la requête modifiée est utilisée pour toutes les lignes de la grille ajoutées ou modifiées
{
sqlCommandToModify.CommandText = sqlCommandToModify.CommandText.Replace("nom=@nom", "nom=@nom,libLong=@libLong")
.Replace("id,nom,type)", "id,nom,type,libLong)")
.Replace(",@type)", ",@type,@libLong)");
}
string id = sqlCommandToModify.Parameters["@id"].Value.ToString(); // il nous faut connaître l'ID de la ligne afin de retrouver le libellé long correspondant à cette ligne
string type = sqlCommandToModify.Parameters["@type"].Value.ToString();
DataTable dt = (DataTable)paramCategoriesForm.Grids[Int32.Parse(type) - 1].DataSource; // derrière la grille, se trouve en fait une DataTable
DataRow[] foundRows = dt.Select(string.Format("id='{0}'", Api.UnquoteSql(id))); // recherche du libellé long sur base de l'ID.
if (foundRows.Length > 0) // en principe, cette condition sera toujours remplie
sqlCommandToModify.Parameters.AddWithValue("@libLong", foundRows[0]["libLong"]); // on ajoute le paramètre SQL @libLong avec la bonne valeur
}
}
}
}
}