2012-08-28 3 views
2

Je veux créer plus d'un gridview. Et je veux les ajouter du code derrière (.cs). Voici mon code qui est presque travaillé. Mais quelqu'un peut-il trouver quel est un problème avec cela?Créer Gridview totalement par programme dans asp.net C# 4.0

Sample.aspx:

<body> 
    <form id="form1" runat="server"> 
      <%CreateGridView();%> 
    </form> 
    </body> 

Sample.aspx.cs:

using System; 
    using System.Collections; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 

    public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected GridView CreateGridView() 
    { 
    GridView gv = new GridView(); 
    gv.ID = "_gridview1"; 
    Queue q = new Queue(); 
    for (int i = 0; i < 20; i++) 
     q.Enqueue(i); 
    gv.DataSource = q; 
    gv.DataBind(); 
    gv.Visible = true; 
    return gv; 
    } 
    } 
+1

Basculer vers MVC. La génération de contrôle est beaucoup plus facile. –

Répondre

4

Sample.aspx:

<body> 
    <form id="form1" runat="server"> 
     <asp:PlaceHolder id="ph" runat="server"/> 
    </form> 
</body> 

Sample.aspx.cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 20; i++) 
    { 
     GridView gv = new GridView(); 
     gv.ID = "_gridview" + i; 
     Queue q = new Queue(); 
     q.Enqueue(i); 
     gv.DataSource = q; 
     gv.DataBind(); 
     ph.Controls.Add(gv); 
    } 
} 
+1

+1 - C'était exactement l'approche que je pensais être une "approche plus sûre" – David

+1

Comme vous l'avez mentionné @DavidStratton le 'Page_Init' pourrait être meilleur! –

+0

Je n'ai pas compris cela. Mais encore, bonne réponse. – David

2

Mais quelqu'un peut-il trouver ce qui est un problème avec ça?

  • Si le GridView sera modifiable, vous perdrez de votre utilisateur change sur chaque publication. (Fonctionnalité/rupture de fonctionnalité)
  • Il ne persistera pas dans Viewstate et les grilles devront être reconstruites à chaque publication de page. (Problème de performance)

Une approche plus sûre peut être d'ajouter un asp: Panel (vous assis appelez GridViewPlaceHolderPanel) à la page, et en cas Page_Init, construire votre GridView dans le code derrière et l'ajouter à l'aide

GridViewPlaceHolderPanel.Controls.Add (gv);

Cependant, si les deux questions que j'énumérées ne sont pas des préoccupations (Il ne sera pas modifiable et que vous voulez qu'il soit construit sur chaque postback), votre approche devrait fonctionner correctement.

+0

Approche plus sûre montrée parfaitement dans le code @JP Hellemons réponse – David

+0

Merci @David Stratton. –