J'ai un GridView qui a plusieurs colonnes dynamiques (je ne sais pas combien au moment du design et il pourrait y avoir 0-12 colonnes, donc besoin de colonnes dynamiques). J'ai les colonnes dans la grille et les données liées à eux - fonctionne très bien. Il existe d'autres colonnes TemplateField standard au design avec des contrôles TextBox. Ceux-ci sont liés à des valeurs que l'utilisateur peut modifier. La grille est postée via un bouton Envoyer.GridView: Columns.Insert() provoque la disparition de mes données lors de la publication, mais Columns.Add() fonctionne correctement?
Ma question est « Pourquoi toutes mes gv.Columns.Insert()
cause de TextBox
données sont nulles sur Postback, mais gv.Columns.Add()
fonctionne comme un champion? »
protected void BuildColumns()
{
// The first column to begin to insert the columns in the GridView
int columnIndex = 5;
BoundField aoColumn = new BoundField();
aoColumn.HeaderText = "New Column 1";
gvMyGrid.Columns.Insert(columnIndex, aoColumn); // kills txtQuantity.Text on postback
gvMyGrid.Columns.Add(aoColumn); // works fine
columnIndex++;
foreach (MyEntity my in _myEntityCollection)
{
BoundField myColumn = new BoundField();
myColumn.HeaderText = String.Format("{0:d}", my.StartDate);
gvMyGrid.Columns.Insert(columnIndex, myColumn);
columnIndex++;
}
}
je puis passer à attribuer des valeurs à ces BoundFields dans la méthode _RowDataBound et tout cela fonctionne très bien. Cependant, lorsque je publie et essaie de référencer certains TextBox et ils sont tous null. Et oui, j'ai l'appel BuildColumns()
enveloppé dans si (!IsPostBack)
sur Page_Load.
Bien sûr, je voudrais utiliser .Insert()
afin que les colonnes puissent aller à l'emplacement approprié et non à la fin du tableau Colonnes.
Oh bouton pression. Ne pas sentir l'amour! –