Bonjour à tous,
J'ai un panel qui contient une ListView. Cette dernière contient dans chaque itemTemplate une dropdowlist, deux textbox et un bouton de suppression.

Chaque dropdownlist de chaque élément du listview contienne les mêmes données récupérés depuis une source, mais les valeurs sélectionnés sont différentes. Certaines valeurs peuvent être identiques aussi.

J'ai une contrainte, sur certaines valeurs de ma dropdownlist, je ne dois pas pouvoir avoir deux lignes qui contiennent cette valeur (je vous passe les détails de ma contrainte)...

J'ai lié ma dropdownlist avec l'événement OnSelectedIndexChanged et mis l'autoPostback à True dans le design :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<asp:DropDownList ID="ddlLinkToDestinationParent" CssClass="ddl-link-to ddl-link-to-child" runat="server"  AutoPostBack="True" OnSelectedIndexChanged="ddlNewConsumptionLinkToDestinationParent_OnSelectedIndexChanged" data-headcount='<%# Eval("HeadCount") %>' />
Je passe bien dans mon événement côté serveur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
var ddl = sender as DropDownList;
 
            if (IsDestinationSelected(ddl))
            {
                // Affichage d'un message d'erreur
                // Il faut mettre à jour la dropdownlist pour avoir l'ancienne valeur visuellement...
 
            }
La méthode IsDestinationSelected est celle qui me permet de récupérer s'il y a déjà une dropdownlist avec cette valeur et qui répond à ma contrainte.

Que mettre après le message d'erreur ?

J'ai essayé différentes solutions, mais rien qui me convienne (320 étant juste pour tester, mais correspond à un item de ma liste) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue("320"));
D'ailleur voilà le code html de ma liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<select name="ctl00$Main$lvSetConsumptionsSite$ctrl1$ddlLinkToDestinationParent" onchange="javascript:setTimeout('__doPostBack(\'ctl00$Main$lvSetConsumptionsSite$ctrl1$ddlLinkToDestinationParent\',\'\')', 0)" id="ctl00_Main_lvSetConsumptionsSite_ctrl1_ddlLinkToDestinationParent" class="ddl-link-to ddl-link-to-child" data-headcount="0">
		<option value="">--- Type de consom° ---</option>
		<option value="870">petit dejeuner 1 siege</option>
		<option value="877">petit dejeuner 2 (siege)</option>
		<option value="133">dejeuner 1 siege</option>
		<option value="26">dejeuner 2 (siege)</option>
		<option value="237">dejeuner 3 (siege)</option>
		<option value="238">dejeuner 4 (siege)</option>
		<option value="239">dejeuner 5 (siege)</option>
		<option value="241">dejeuner 6 (siege)</option>
		<option value="288">dejeuner 7 (siege)</option>
		<option value="852">pique nique (gouter 1 siege)</option>
		<option value="507">diner 1 (siege)</option>
		<option value="883">test 20/09 (diner - siege)</option>
		<option value="136">Goûter 2 (siege)</option>
		<option value="134">Resident (pas dans CM)</option>
		<option value="24">pertes (diner - siege)</option>
		<option value="25">cessions (pas dans CM)</option>
		<option value="201">Taxes et Frais divers (pas dans CM)</option>
		<option value="227">Emballages (consignes et déconsignes)</option>
		<option value="135">Diners de luxe (pas dans CM)</option>
		<option selected="selected" value="320">ajustement de stock</option>
		<option value="334">autre</option>
		<option value="745">HAPPY</option>
		<option value="876">consommation</option>
		<option value="802">test AB Cons 3105 01</option>
		<option value="869">panier repas (pas dans CM)</option>
		<option value="915">1 dest. siege</option>
		<option value="953">collation de 11h</option>
 
	</select>
Du coup, vu que la mise à jour ne se fait pas au niveau de ma dropdowlist, et que j'essaie de lui changer de valeur en mode code, il repasse en boucle dans mon événement.

Auriez-vous une idée qui me permettrait de résoudre ce problème ?

Merci par avance de vos réponses !