Permettre de cocher automatiquement les éléments d'une picklist en fonction des éléments déjà saisis dans le champ
Lors de l'utilisation d'une vue pour permettre la sélection de donnée, il n'est pas possible pour le moment, de checker les différents éléments déjà sélectionnés dans le champ.
Le code ci-dessous permet de rajouter cette possibilité, également lors de l'affectation de plusieurs champs de retour.
Onglet Code ( partie haute)
Grid.CustomCallback += gridView_CustomDataCallback;
Grid.ClientSideEvents.EndCallback = "gridView_EndCallback";
var script = @"
function LoadValuesSelected(){ SetValuesForField('NomDuChamp');}
//LoadValuesSelected(); //Version avant 2019
WaitForContext(LoadValuesSelected);
";
string scriptFct = @"
function SetValuesForField(fieldName)
{
//var vals = window.parent.APSGetFieldValueByName(fieldName); //Version avant 2019
var vals = context.scope.APSGetFieldValueByName(fieldName);
console.log('Valeurs lues : ' + vals);
gridView.PerformCallback('GetNodeKeysToCheck|' + vals);
}
var refreshValsDone = false;
function gridView_EndCallback(s, e) {
if (!refreshValsDone) {
console.log('End callback');
console.log('Valeurs des ids : ' + gridView.cpSelect);
var selection = gridView.cpSelect.split(';');
refreshValsDone = true;
gridView.SelectRowsByKey(selection, true);
}
}
";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"CUSTOM_LOAD2",scriptFct,true);
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "CUSTOM_LOAD", script, true);
Onglet Code (partie basse)
void gridView_CustomDataCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
{
((ASPxGridView)sender).JSProperties.Clear();
if (e.Parameters.StartsWith("GetNodeKeysToCheck"))
{
string[] vals = e.Parameters.Split('|')[1].Split(';');
System.Collections.Generic.List<string> listOfKeys = new System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> listOfVals = new System.Collections.Generic.List<string>();
foreach (string val in vals)
listOfVals.Add(val);
ASPxGridView gv = new ASPxGridView();
gv = Grid;
gv.DataBind();
for (int i = 0; i < gv.VisibleRowCount; i++)
{
object keyValue = gv.GetRowValues(i, new string[] { gv.KeyFieldName, "retour" });
string id = "";
string value = "";
if(keyValue != null && ((object[])keyValue).Length == 2)
{
id = ((object[])keyValue)[0].ToString();
value= ((object[])keyValue)[1].ToString();
}
if (listOfVals.Contains(value.Split('|')[0]))//Cas permettant de gerer le champ avec multiple valeur de retour ou le champ simple.Attention dans le cas d'un champ avec plusieurs valeurs, le premier champ concaté doit etre celui renvoyé dans le champ
listOfKeys.Add(id);
}
((ASPxGridView)sender).JSProperties.Add("cpSelect", string.Format("{0}", string.Join(";",listOfKeys.ToArray())));
}
}