2009-09-25 5 views
4

Dans un composant WebPart pour Sharepoint, j'essaie d'ajouter dynamiquement un nombre/ordre de ButtonColumns à un DataGrid en fonction d'une option sélectionnée par l'utilisateur. Le problème est que les colonnes dynamiques ne déclenchent pas les événements que j'ai configurés sur le DataGrid (tels que SelectedIndexChanged). Lorsque la table constituait à l'origine un ensemble statique de colonnes, elles ont été créées dans CreateChildControls() et tout a fonctionné avec Peachy. Cependant, comme ils sont maintenant dynamiques, je dois retarder leur ajout jusqu'à ce que l'événement de clic d'un bouton de recherche se déclenche. Je me demandais s'il y avait un endroit où j'avais besoin de déplacer la création de la colonne pour qu'elle soit encore dynamique, mais aussi pour enregistrer/déclencher des événements.Evénements non déclencheurs pour les colonnes dynamiques dans SharePoint DataGrid

création outputDG dans CreateChildControls():

outputDG = new System.Web.UI.WebControls.DataGrid(); 
outputDG.CellPadding = 4; 
outputDG.HeaderStyle.Font.Bold = false; 
outputDG.HeaderStyle.Font.Name = "Verdana"; 
outputDG.HeaderStyle.BackColor = Color.FromArgb(242,242,242); 
outputDG.HeaderStyle.ForeColor = Color.FromArgb(128,128,128); 
outputDG.HeaderStyle.Wrap = false; 
//outputDG.ItemStyle.BorderColor = Color.Navy; 
outputDG.HorizontalAlign = HorizontalAlign.Left; 
//outputDG.BorderWidth = 1; 
outputDG.GridLines = GridLines.Horizontal; 
outputDG.Width = propsMgr.SearchGridWidth; 
outputDG.PageSize = 10; 
outputDG.AllowPaging = true; 
outputDG.PagerStyle.Mode = PagerMode.NumericPages; 
outputDG.PagerStyle.PageButtonCount = 5; 
outputDG.PagerStyle.NextPageText = "Next Page"; 
outputDG.PagerStyle.PrevPageText = "Previous Page"; 
outputDG.PagerStyle.Visible = true; 
outputDG.PageIndexChanged += new DataGridPageChangedEventHandler(this.outputDG_PageIndexChanged); 
outputDG.AllowSorting = false; 
outputDG.SortCommand += new DataGridSortCommandEventHandler(this.outputDG_SortCommand); 
outputDG.SelectedItemStyle.BackColor = Color.FromArgb(255,244,206); 
outputDG.SelectedIndexChanged += new EventHandler(this.outputDG_SelectedIndexChanged); 
outputDG.ItemCreated += new DataGridItemEventHandler(this.outputDG_ItemCreated); 
outputDG.AutoGenerateColumns = false; 
outputDG.ItemCommand += new DataGridCommandEventHandler(outputDG_ItemCommand); 
Controls.Add(outputDG); 

Au cours de l'événement click sur le bouton de recherche:

ButtonColumn buttonColumnSelect = new ButtonColumn(); 
buttonColumnSelect.ButtonType = ButtonColumnType.LinkButton; 
buttonColumnSelect.CommandName = "Select"; 
buttonColumnSelect.HeaderText = "Column"; 
buttonColumnSelect.DataTextField = "columnField"; 
outputDG.Columns.Add(buttonColumnSelect); 

Et puis plus tard ce même événement, je passe par le jeu de résultats et d'ajouter dans mon lignes de données. Comme je l'ai mentionné, tout cela a fonctionné lorsque le code ButtomColumn était en place dans CreateChildControls(), mais il a cessé de fonctionner dès qu'il a été déplacé dans un événement. Ma meilleure supposition est que l'événement pour la colonne n'a pas une chance de s'inscrire pour tirer parce que cela se passe d'un événement différent. Si j'ai besoin de résoudre ce problème en construisant le DataGrid différemment, je suis certainement prêt; Je dois juste être capable de spécifier dynamiquement différentes colonnes à utiliser.

Répondre

0

Le correctif de mon cas était de déplacer l'ajout des colonnes à l'événement de chargement de la page et l'ajout du contrôle DataGrid aux contrôles après l'ajout de toutes les colonnes.

0

Peut-être avez-vous besoin de définir l'attribut ID sur le DataGrid. sinon il serait difficile pour asp de trouver votre contrôle.

Questions connexes