2010-10-13 20 views
1

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? »

Relevant SO Link

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.

Répondre

2

bug Visual Studio qui ne sera pas fixé:

En savoir plus sur ce here.

+0

Oh bouton pression. Ne pas sentir l'amour! –