2014-05-11 3 views
3

Je veux savoir comment ajouter une colonne dynmiquement à gridview. la vue de grille suppose d'obtenir l'entrée de l'utilisateur. Je sais comment utiliser itemtemplate pour des no spécifiques de colonnes, mais je ne sais pas comment ajouter dynamiquement des colonnes avec des champs itemtemplate (textbox) et créer une base de données.Ajouter dynamiquement des colonnes à Grid-view avec itemtemplate

Répondre

5

Vous devez créer une classe implémentant ITemplate, code complet comme suivant:

public class DynamicTemplateField : ITemplate 
{ 

    public void InstantiateIn(Control container) 
    { 
     //define the control to be added , i take text box as your need 
     TextBox txt1 = new TextBox(); 
     txt1.ID = "txt1"; 
     container.Controls.Add(txt1); 
    } 
} 

//Method to bind the Grid View 
public void BindData() 
{ 
    TemplateField temp1 = new TemplateField(); //Create instance of Template field 
    temp1.HeaderText = "New Dynamic Temp Field"; //Give the header text 

    temp1.ItemTemplate = new DynamicTemplateField(); //Set the properties **ItemTemplate** as the instance of DynamicTemplateField class. 


    gv.Columns.Add(temp1); //add the instance if template field in columns of grid view 

    //Bind the grid view 
    gv.DataSource = [your data source]; 
    gv.DataBind(); 

} 

RowDataBound

protected void gv_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     TextBox txt1 = e.Row.FindControl("txt1") as TextBox; 
     txt1.Text = e.Row.DataItem["Name"]; //Assign any column value of your datasource 
    } 

} 

page .aspx

<asp:GridView ID = "gv" runat = "server" > 
    <Columns> 

    </Columns> 
</asp:GridView> 

Vous pouvez manipuler DynamicTemplateField classe pour ajouter différents types de contrôle

+0

colonne dynamique ajoutée, très bien. mais comment faites-vous la liaison pour chaque itemtemplate et ajoutez de nouvelles lignes dans cette approche? –

+0

Utilisez l'événement RowDataBound pour attribuer une valeur aux contrôles ajoutés dynamiques. La réponse publiée est modifiée en conséquence –

Questions connexes