Bonjour,

J'ai un datagrid, et lorsque j'édite une ligne, je remplace certaines TextBoxs par des DropDowLists.

Le problème, est quand je fais save, je tombe sur ce message d'erreur:
Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.
Et j'ai l'impression que cette erreur arrive avant même le retour serveur (je ne passe par aucun point d'arrêt du débbugeur).

Le problème vient bien des DDL car si je ne les mets pas, je n'ai pas d'erreur.

Voici mon code où j'inclus les DDL:
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
 
item.Cells[(int)WorkEnum.PRO_NAME_COLUMN].Controls.RemoveAt(0);
            DropDownList ddlProjects = new DropDownList();
            ddlProjects.DataTextField = "PRO_NAME";
            ddlProjects.DataValueField = "PRO_ID";
            ddlProjects.ID = "ddlProjects";
            BindListInsertSelect(ddlProjects, CurrentOdessaController.GetAllProjectsByCI(CurrentOdessaController.CurrentUser.SER_CI));
            ddlProjects.SelectedValue = item.Cells[(int)WorkEnum.PRO_ID_COLUMN].Text;
            item.Cells[(int)WorkEnum.PRO_NAME_COLUMN].Controls.Add(ddlProjects);
            ViewState.Add(ddlProjects.ID, ddlProjects.UniqueID);
 
            CompareValidator ddlProjectsCompareValidator = new CompareValidator();
            ddlProjectsCompareValidator.ControlToValidate = ddlProjects.ID;
            ddlProjectsCompareValidator.ValidationGroup = "saveWorkValidationGroup";
            ddlProjectsCompareValidator.Text = "*";
            ddlProjectsCompareValidator.ValueToCompare = "-1";
            ddlProjectsCompareValidator.Operator = ValidationCompareOperator.NotEqual;
            ddlProjectsCompareValidator.ErrorMessage = "Project?";
            (item.Cells[(int)WorkEnum.PRO_NAME_COLUMN].Controls).Add(ddlProjectsCompareValidator);
 
item.Cells[(int)WorkEnum.TAS_NAME_COLUMN].Controls.RemoveAt(0);
            DropDownList ddlTasks = new DropDownList();
            ddlTasks.DataTextField = "TAS_NAME";
            ddlTasks.DataValueField = "TAS_ID";
            ddlTasks.ID = "ddlTasks";
            BindListInsertSelect(ddlTasks, CurrentOdessaController.GetAllTasksByProject(Convert.ToInt32(item.Cells[(int)WorkEnum.PRO_ID_COLUMN].Text)));
            ddlTasks.SelectedValue = item.Cells[(int)WorkEnum.TAS_ID_COLUMN].Text;
            item.Cells[(int)WorkEnum.TAS_NAME_COLUMN].Controls.Add(ddlTasks);
            ViewState.Add(ddlTasks.ID, ddlTasks.UniqueID);
 
            CompareValidator ddlTasksCompareValidator = new CompareValidator();
            ddlTasksCompareValidator.ControlToValidate = ddlTasks.ID;
            ddlTasksCompareValidator.ValidationGroup = "saveWorkValidationGroup";
            ddlTasksCompareValidator.Text = "*";
            ddlTasksCompareValidator.ValueToCompare = "-1";
            ddlTasksCompareValidator.Operator = ValidationCompareOperator.NotEqual;
            ddlTasksCompareValidator.ErrorMessage = "Task?";
            (item.Cells[(int)WorkEnum.TAS_NAME_COLUMN].Controls).Add(ddlTasksCompareValidator);
 
ddlProjects.Attributes.Add("onchange", "return showTasks(this.value, '" + ddlTasks.ClientID + "')");
Merci d'avance à ceux qui ont une idée du problème et une solution à proposer!