Failed to load viewstate pour les DDL d'un item édité dans une DataGrid
Bonjour, :P
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:
Citation:
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:
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! :P