Bonjour,

J'ai actuellement le problème suivant.
Je créée un user contrôle contenant une asp:Table vide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Popups.ascx.cs" Inherits="WebApp.Uc.Popups" %>
<div runat="server" id="listMessages" clientidmode="Static">
    <asp:Table runat="server" id="tbMessages" clientidmode="Static">
    </asp:Table>
    <asp:Button runat="server" ID="btnCorrection" Text="Marquer comme résolus" OnClick="btnCorrection_Click" />
    <button type="button" id="btnMasquer" runat="server" onclick="MasquerMessages('listMessages','btnAfficher',true)" clientidmode="Static">Masquer les alertes</button>    
</div>
Dans cette table, je dois afficher une liste de messages récupérés en base. En face de chaque message, j'ajoute une checkbox

Dans mon Page_Load, je récupère donc ma liste de messages, et pour chaque message, j'ajoute une TableRow à ma table. Dans chaque TableRow, j'ai ajouté 2 cellules (une pour le message et une pour la cb).

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
32
33
34
35
36
37
38
39
40
41
42
43
44
private void BuildTbl()
        {
            int nbLigne = 1;
 
            // On parcourt les popups du porteur
            for (int i = 0; i < porteur.popups.Rows.Count; i++)
            {
                DataRow DRpopup = porteur.popups.Rows[i];
 
                // On extrait le code popup de chaque ligne
                string currentCode = DRpopup["code"].ToString();
 
                // On vérifie si ce code doit être affiché : 
                // - soit parce qu'on souhaite afficher tous les codes
                // - soit parce qu'il est inclus dans la liste des codes souhaités 
                if (codeList.Count == 0 || CheckCodeInList(currentCode,codeList))
                {
                    TableRow tbRow = new TableRow();
                    TableCell tbCellMessage = new TableCell();
                    TableCell tbCellCheckbox = new TableCell();
                    TableCell tbCellId = new TableCell();
 
                    Label message = new Label();
                    CheckBox corrected = new CheckBox();
 
                    tbRow.ID = "tbMessagesRow" + nbLigne.ToString();
                    tbCellId.ID = "IdCell" + nbLigne.ToString();
                    tbCellMessage.ID = "messageCell" + nbLigne.ToString();
                    tbCellCheckbox.ID = "checkboxCell" + nbLigne.ToString();
 
                    message.Text = DRpopup["libelle"].ToString();
                    tbCellId.Text = DRpopup["popUpId"].ToString();
                    //tbCellId.Visible = false;
 
                    tbCellMessage.Controls.Add(message);
                    tbCellCheckbox.Controls.Add(corrected);
 
                    tbRow.Cells.Add(tbCellMessage);
                    tbRow.Cells.Add(tbCellCheckbox);
                    tbMessages.Rows.Add(tbRow);
 
                    nbLigne++;
                }
            }
Tout se passe bien, ma liste est générée, ma page est magnifique.

Lors du clic sur un bouton de la page, je dois récupérer les lignes cochées.
Dans la fonction OnClick, je veux donc parcourir ma table, mais là, je constate que tbMessages.Rows.Count = 0.
De même, mes FindControl sur les checkbox renvoient tous null.

Pourriez-vous m'indiquer le problème ?

J'ai déjà pas mal fouillé, et je suis tombé sur ce lien, et ce lien.
Du coup j'ai essayé de modifier le EnableViewState de ma table, sans succès.
Je n'ai pas encore essayé la solution donnée dans l'autre lien, qui pouvait expliquer l'échec du FindControl, mais pas celui du tbMessages.Rows.Count.

Merci d'avance pour votre aide.