Bonjour,
Je débute sur .Net et je ne suis pas encore très au fait des bonnes pratiques.
Mon projet est un peu complexe pour pouvoir poster du code.
Je requête un système SAP et j'affiche mes données dans une listview qui permet aux utilisateurs des modifier des données que je renvoie vers SAP.
Les controls de mon itemtemplate qui semble poser problème :
le code serveur :
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 <asp:ImageButton ID="bouton_plus" runat="server" AlternateText="Ajouter" Height="15px" ImageUrl="~/img/plus.png" OnClick="click_plus" TabIndex="<%# Container.DataItemIndex %>" Width="15px" /> <asp:TextBox ID="zqtcmd" runat="server" AutoPostBack="True" causevalidation="true" ControlStyle-Width="80px" Style="text-align:right" TabIndex="<%# Container.DataItemIndex %>" OnTextChanged="saisi_quantite" Text='<%# Convert.ToInt32(Eval("zqtcmd")) %>'> </asp:TextBox> <asp:MaskedEditExtender ID="MaskedEditExtender1" runat="server" TargetControlID="zqtcmd" Mask="999999999" PromptCharacter="" ClearTextOnInvalid="true"> </asp:MaskedEditExtender>
et
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 protected void click_plus(object sender, EventArgs e) { // Récupération de la ligne selectionnée ImageButton buttonclick = (ImageButton)sender; int rownumber = buttonclick.TabIndex; // Mise à jour des données sauvegardées dans la session DataTable dt = (DataTable)(Session["dt_data"]); DataRow row = dt.Rows[rownumber]; //row.BeginEdit(); // ajoute increment row[11] = (Convert.ToInt32(row[11]) + Convert.ToInt32(row[4])).ToString(); //row.EndEdit(); // mise à jour de la listview bindListView(); }
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 protected void saisi_quantite(object sender, EventArgs e) { // Récupération quantité saisie TextBox inputModif = (TextBox)sender; int rownumber = inputModif.TabIndex; // Mise à jour des données sauvegardées dans la session DataTable dt = (DataTable)(Session["dt_reappro_client"]); DataRow row = dt.Rows[rownumber]; // CONTROLE SAISI float reste = Convert.ToInt32(inputModif.Text) % Convert.ToInt32(row[4]); if (reste == 0) { //row.BeginEdit(); row[11] = inputModif.Text.ToString(); //row.EndEdit(); } else { //inputModif.Text = "0"; //row.BeginEdit(); row[11] = "0"; // row.EndEdit(); } // mise à jour de la listview bindListView(); }
A première vu tout fonctionne, mais lorsque l'on se sert des boutons retour et refresh du navigateur les modifications apportées en saisie ou par le click sur le bouton plus ne sont pas sauvegardées. Je me retrouve avec ma zone de saisie à 0. Et cela uniquement pour le premier item de ma listview. Pour les items suivants tout fonctionne correctement. Si je suis le processus de validation des données, la page suivante reçoit bien les données à jours modifiées par mes deux fonctions click_plus et saisi_quantite.
En debug je me suis rendu compte que la methode saisi_quantite était systématiquement appelé deux fois. Qu'est qui généré ce double appel ? Le fait d'être en debug ?
Pouvez-vous me donner une piste, je galère sur ce problème depuis ce matin et là je craque !
Si vous avez des remarques à faire sur la technique de codage elles seront également les bienvenues.
Merci d'avance pour votre aide !
Stéphane
Partager