locked
Comment créer dynamiquement des colonnes dans un contrôle de présentation de données RRS feed

  • Discussion générale

  • Lorsque vous ne connaissez pas le nombre de colonnes que vous devriez ajouter dans un contrôle GridView, vous pouvez créer des colonnes dynamiquement à l'aide d'un contrôle template personnalisé, comme illustré dans l'exemple suivant :

     

    protected void Page_Load(object sender, EventArgs e)
    {
            if (!IsPostBack)
            {
                TemplateField customField1 = new TemplateField();
                customField1.ShowHeader = true;
                customField1.HeaderTemplate = 
                    new GridViewTemplate(DataControlRowType.Header, "ID", "");
                customField1.ItemTemplate = 
                    new GridViewTemplate(DataControlRowType.DataRow, "", "Contract");
                GridView1.Columns.Add(customField1); 
                GridView1.DataSource = GetDataSource();
                GridView1.DataBind();
            }
    }
     
    public class GridViewTemplate : ITemplate
    {
        private DataControlRowType templateType;
        private string columnName;
        private string columnNameBinding;
        public GridViewTemplate(DataControlRowType type, string colname, 
            string colNameBinding)
        {
            templateType = type;
            columnName = colname;
            columnNameBinding = colNameBinding;
        }
        public void InstantiateIn( System.Web.UI.Control container )
        {
            switch (templateType)
            {
                case DataControlRowType.Header:
                    Literal lc = new Literal();
                    lc.Text = columnName;          
                    container.Controls.Add(lc);          
                    break;
                case DataControlRowType.DataRow:
                    CheckBox cb = new CheckBox();
                    cb.ID = "cb1";
                    cb.DataBinding += new EventHandler(this.cb_OnDataBinding);  
                    container.Controls.Add(cb);
                    break;
                default:
                    break;
            }
        }
        public void cb_OnDataBinding(object sender, EventArgs e)
       {
            CheckBox cb = (CheckBox)sender;
            GridViewRow container = (GridViewRow)cb.NamingContainer;
            cb.Checked = Convert.ToBoolean(
                ((DataRowView)container.DataItem)[columnNameBinding].ToString());
        }
    }

     

    Pour plusieurs informations, visitez la page Foire aux Questions – ASP.NET

     


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    jeudi 8 avril 2010 12:39
    Modérateur