Bonjour
j'essaie d'afficher les colones de ma source de données d'une façon dynamique à partir de la classe suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
 
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
using System.Data.SqlClient;
 
public class DynamicallyTemplatedGridViewHandler : ITemplate
{
    #region data memebers
 
    ListItemType ItemType;
    string FieldName;
    string InfoType;
 
    #endregion
 
    #region constructor
 
    public DynamicallyTemplatedGridViewHandler(ListItemType item_type, string field_name, string info_type)
    {
        ItemType = item_type;
        FieldName = field_name;
        InfoType = info_type;
    }
 
    #endregion
 
    #region Methods
 
    public void InstantiateIn(System.Web.UI.Control Container)
    {
        switch (ItemType)
        {
            case ListItemType.Header:
                Literal header_ltrl = new Literal();
                header_ltrl.Text = "<b>" + FieldName + "</b>";
                Container.Controls.Add(header_ltrl);
                break;
 
            case ListItemType.Item:
                switch (InfoType)
                {
                    case "Command":
                        ImageButton edit_button = new ImageButton();
                        edit_button.ID = "edit_button";
                        edit_button.ImageUrl = "~/Commun/Images/edit_small.png";
                        edit_button.CommandName = "Edit";
                        edit_button.Click += new ImageClickEventHandler(edit_button_Click);
                        edit_button.ToolTip = "Edit";
                        Container.Controls.Add(edit_button);
 
                        ImageButton delete_button = new ImageButton();
                        delete_button.ID = "delete_button";
                        delete_button.ImageUrl = "~/Commun/Images/delete2.png";
                        delete_button.CommandName = "Delete";
                        delete_button.ToolTip = "Delete";
                        //delete_button.OnClientClick = "return confirm('Are you sure to delete the record?')";
                        Container.Controls.Add(delete_button);
 
                        /* Similarly add button for insert.
                         * It is important to know when 'insert' button is added 
                         * its CommandName is set to "Edit"  like that of 'edit' button 
                         * only because we want the GridView enter into Edit mode, 
                         * and this time we also want the text boxes for corresponding fields empty*/
                        ImageButton insert_button = new ImageButton();
                        insert_button.ID = "insert_button";
                        insert_button.ImageUrl = "~/Commun/Images/add2.png";
                        insert_button.CommandName = "Edit";
                        insert_button.ToolTip = "Insert";
                        insert_button.Click += new ImageClickEventHandler(insert_button_Click);
                        Container.Controls.Add(insert_button);
 
                        break;
 
                    default:
                        Label field_lbl = new Label();
                        field_lbl.Text = String.Empty; //we will bind it later through 'OnDataBinding' event
                        field_lbl.DataBinding += new EventHandler(OnDataBinding);
                        Container.Controls.Add(field_lbl);
                        break;
 
                }
                break;
            case ListItemType.EditItem:
                if (InfoType == "Command")
                {
                    ImageButton update_button = new ImageButton();
                    update_button.ID = "update_button";
                    update_button.CommandName = "Update";
                    update_button.ImageUrl = "~/images/update.gif";
                    if ((int)new Page().Session["InsertFlag"] == 1)
                        update_button.ToolTip = "Add";
                    else
                    update_button.ToolTip = "Update";
                    //update_button.OnClientClick = "return confirm('Are you sure to update the record?')";
                    Container.Controls.Add(update_button);
 
                    ImageButton cancel_button = new ImageButton();
                    cancel_button.ImageUrl = "~/images/cancel.gif";
                    cancel_button.ID = "cancel_button";
                    cancel_button.CommandName = "Cancel";
                    cancel_button.ToolTip = "Cancel";
                    Container.Controls.Add(cancel_button);
 
                }
                else// for other 'non-command' i.e. the key and non key fields, bind textboxes with corresponding field values
                {
                    TextBox field_txtbox = new TextBox();
                    field_txtbox.Text = String.Empty;
                     //if Inert is intended no need to bind it with text..keep them empty
                    if ((int)new Page().Session["InsertFlag"] == (int)EnumInsertFlag.Edit)
                    field_txtbox.DataBinding += new EventHandler(OnDataBinding);
                    Container.Controls.Add(field_txtbox);
 
                }
                break;
            case ListItemType.Footer:
                if(InfoType!="Command")
                {
                    TextBox MonTextBox = new TextBox();
                    MonTextBox.Text = String.Empty;
                    Container.Controls.Add(MonTextBox);
                }
                break;
        }
    }
 
    #endregion
 
    #region Event Handlers
 
    //just sets the insert flag ON so that we ll be able to decide in OnRowUpdating event whether to insert or update
    protected void insert_button_Click(Object sender,ImageClickEventArgs e)
    {
        new Page().Session["InsertFlag"] = (int)EnumInsertFlag.Insert;
    }
    //just sets the insert flag OFF so that we ll be able to decide in OnRowUpdating event whether to insert or update 
    protected void edit_button_Click(Object sender, ImageClickEventArgs e)
    {
        new Page().Session["InsertFlag"] = (int)EnumInsertFlag.Edit;
    }
 
    private void OnDataBinding(object sender, EventArgs e)
    {
 
        object bound_value_obj = null;
        Control ctrl = (Control)sender;
        IDataItemContainer data_item_container = (IDataItemContainer)ctrl.NamingContainer;
        bound_value_obj = DataBinder.Eval(data_item_container.DataItem, FieldName);
 
        switch (ItemType)
        {
            case ListItemType.Item:
                Label field_ltrl = (Label)sender;
                field_ltrl.Text = bound_value_obj.ToString();
 
                break;
            case ListItemType.EditItem:
                TextBox field_txtbox = (TextBox)sender;
                field_txtbox.Text = bound_value_obj.ToString();
 
                break;
        }
    }
 
    #endregion
 
 
}
pour l'affichage ce code marche à merveille mais qand j'édite ,les données ne s'affiche plus comme si la grille n'est plus Bind(é) ,voici le code Behind de ma page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ChargerGrilleMoyensFinanciers();
            LoadListeMoyensFinancier();
        }
    }
    private void LoadListeMoyensFinancier()
    {
        UmsProjet ProjetCourant = MonProjetService.RechercherProjetParId(IdProjet);
        DataSet1 MonDataSet = MonMoyenFinancierService.RecupererGrilleMoyenFinancier(ProjetCourant);
        ListeMoyensFinanciers.DataSource = MonDataSet.maTable;
        ListeMoyensFinanciers.DataBind();
        IList<UmsRubriqueBudgetaire> MesRubriquesBudgetaires = MaRubriqueBudgetService.Tout();
        DropDownList FooterListe = (DropDownList)ListeMoyensFinanciers.FooterRow.FindControl("ListeRubriquesBudgetaires");
        FooterListe.DataSource = MesRubriquesBudgetaires;
        FooterListe.DataBind();
    }
 
    private void ChargerGrilleMoyensFinanciers()
    {
        UmsProjet ProjetCourant = MonProjetService.RechercherProjetParId(IdProjet);
        DataSet1 MonDataSet = MonMoyenFinancierService.RecupererGrilleMoyenFinancier(ProjetCourant);
        DataTable UneTable = MonDataSet.maTable;
        //ListeMoyensFinanciers.Columns.Clear();
 
        foreach (DataColumn Column in UneTable.Columns)
        {
            if (Column.ColumnName != "Id" & Column.ColumnName!="Designation")
            {
                TemplateField MyColumnTemplate = new TemplateField();
                MyColumnTemplate.HeaderText = Column.ColumnName;
                MyColumnTemplate.ItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.Item, Column.ColumnName, UneTable.Columns[Column.ColumnName].DataType.Name);
                MyColumnTemplate.EditItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.EditItem, Column.ColumnName, UneTable.Columns[Column.ColumnName].DataType.Name);
                MyColumnTemplate.FooterTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.Footer, Column.ColumnName, UneTable.Columns[Column.ColumnName].DataType.Name);
                ListeMoyensFinanciers.Columns.Add(MyColumnTemplate);
            }
        }
        TemplateField MyButton = new TemplateField();
        MyButton.ItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.Item, "CRUD", "Command");
        MyButton.EditItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.EditItem, "INSERT", "Command");
        ListeMoyensFinanciers.Columns.Add(MyButton);
    }
 
    public void Editer_MoyenFinancier(object sender,GridViewEditEventArgs e)
    {
        int RowIndex = e.NewEditIndex;
        ListeMoyensFinanciers.EditIndex = RowIndex;
        ListeMoyensFinanciers.Rows[RowIndex].RowState = DataControlRowState.Edit;
        ListeMoyensFinanciers.DataBind();
        Session["SelecetdRowIndex"] = e.NewEditIndex;
 
    }
    public void Supprimer_MoyenFinancier(object sender, GridViewDeleteEventArgs e)
    {
        ChargerGrilleMoyensFinanciers();
    }
    public void Annuler_Editer_MoyenFinancier(object sender, GridViewCancelEditEventArgs e)
    {
        ListeMoyensFinanciers.EditIndex = -1;
        ListeMoyensFinanciers.DataBind();
        Session["SelecetdRowIndex"] = -1; 
    }
    public void MAJ_MoyenFinancier(object sender, GridViewUpdateEventArgs e)
    {
        ChargerGrilleMoyensFinanciers();
    }
je suis vraiment bloqué et j'attends vraiment vos remarques
Merci