Datagrid OnItemCommand HELP !

Résolu
lamagnifik Messages postés 3 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 19 décembre 2008 - 18 déc. 2008 à 16:53
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 19 déc. 2008 à 19:06
Bonjour tout le monde,

je suis à bout avec mon datagrid et j'ai vraiment besoin de votre aide !
Je souhaite mettre à jour les données contenues dans mon datagrid à travers l'évènement OnItemCommand
Pour celà j'ai utilisé un templateColumn dans lequel j'ai 2 imageButton pour editer et supprimer l'enregistrement (j'ai utilisé la propriété commandName).
En mode édition (après un click sur le boutton éditer) 2 autres imageButton apparaissent pour valider ou suprimmer la mise à jour mais qui ne marchent pas.
Dans mon code la suppresion marche l'édition aussi mais les bouton de validation et d'annulation de la mise à jour ne marche pas : rien ne se passe. Je suis désespéré ! 

Cependant les évenements associés aux buttons "_btnUpdateCnslt" et "_btnCancelCnslt" ne marchent pas : rien ne se produit !!
Merci d'avance pour vos commentaires.
 
ci dessous mon datagrid :

<asp:DataGrid
id="_consultantDtGrid"
runat="server"
HorizontalAlign="Center"

                  BorderWidth="1px"
BorderColor="#5190b2"
BorderStyle="Solid"

                  AutoGenerateColumns="False"
Visible="false"
Width="99%"

                  AlternatingItemStyle-BackColor="#e3e6d4"

                   OnItemCommand="_consultantDtGrid_ItemCommand">

      <Columns>

               <asp:BoundColumn
DataField="id_consultant"
Visible="false"

                                 HeaderText="#"
HeaderStyle-CssClass="dataHead"

                                 ItemStyle-CssClass
="centerLowercaseItem">

              </asp:BoundColumn>

              <asp:BoundColumn
DataField="c_name"

                                    HeaderText
="Name"
HeaderStyle-CssClass="dataHead"

                                    ItemStyle-CssClass
="leftLowercaseItem">

              </asp:BoundColumn>

              <asp:TemplateColumn
HeaderStyle-CssClass="dataHead"
HeaderText="Actions"

                                     ItemStyle-CssClass="centerLowercaseItem">

                        <ItemTemplate>

                                    <asp:ImageButton
ID="_btnEditCnslt"
runat="server"

                                                  ToolTip="Edit this row"

                                                   ImageUrl="~/images/icons/modifier.png"
CssClass="dgButton"

                                                   CommandName="editCnslt"/>

                                    <asp:ImageButton
ID="_btnDeleteCnslt"
runat="server"

                                                   ToolTip="Delete this row"

                                                   ImageUrl="~/images/icons/cross.gif"
CssClass="dgButton"

                                                   OnClientClick="return Delete()"

                                                   CommandName="deleteCnslt"/>

                        </ItemTemplate>

                       <EditItemTemplate>

                                    <asp:ImageButton
ID="_btnUpdateCnslt"
runat="server"

                                                   ToolTip
="Valid changes"

                                                   ImageUrl="~/images/icons/tick.gif"
CssClass="dgButton"

                                                   CommandName="updateCnslt"
/>

                                    <asp:ImageButton
ID="_btnCancelCnslt"
runat="server"

                                                   ToolTip="Cancel changes"

                                                   ImageUrl="~/images/icons/cross.gif"
CssClass="dgButton"

                                                   Width="14px"
Height="14px"

                                                   CommandName="cancelCnslt"
/>

                        </EditItemTemplate>

      </asp:TemplateColumn>

</Columns>

</asp:DataGrid>

Et mon code C# :

if (e.CommandName ==
"editCnslt"){

         _consultantDtGrid.EditItemIndex = e.Item.ItemIndex;

         _consultantDtGrid.EditItemIndex = 0;

         _error_message.InnerText = e.Item.Cells[0].Text +

" - " + e.Item.Cells[1].Text;         LoadConsultantTable();

}

else
if (e.CommandName ==
"updateCnslt"){

         // Connexion à la BD

         DataBaseConnection C =
new
DataBaseConnection();

         // Exécution de la requete
         String query "UPDATE FROM consultant WHERE id_consultant " + e.Item.Cells[0].Text +

         " SET c_name = '" + e.Item.Cells[1].Text +
"'";         C.ExecuteQuery(query);

         _error_message.InnerText = e.Item.Cells[0].Text +

" - " + e.Item.Cells[1].Text;
// Affiche la requete}

else
if (e.CommandName ==
"cancelCnslt"){

         _consultantDtGrid.EditItemIndex = -1;

         LoadConsultantTable();

}

else
if (e.CommandName ==
"deleteCnslt"){

         // Connexion à la BD

         DataBaseConnection C =
new
DataBaseConnection();

         // Exécution de la requete         C.ExecuteQuery(

"DELETE FROM consultant WHERE id_consultant =" + e.Item.Cells[0].Text);        _consultantDtGrid.EditItemIndex = -1;

         LoadConsultantTable();

}

4 réponses

lamagnifik Messages postés 3 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 19 décembre 2008
19 déc. 2008 à 11:00
Coucou
ça y'est j'ai trouvé où était le problème !!! et j'ai honte là !
Comment ne l'ai-je pas vu plutôt ???
Il fallait juste mettre le code correspondant au remplissage de mon Datagrid au chargement de la page donc dans le Page_Load (je sais c'est EVIDENT il me fallait juste ouvrir les yeux)et sans oublier le  if (!IsPostBack)
 
moi je l'avais mis dans le OnInit...
Dans tous les cas merci d'avoir réagi à ma demande d'aide.
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
19 déc. 2008 à 09:59
Salut,

Voila comment je fais.

C'est beaucoup plus propre (découapge par couche)
C'est des extraits de code bien sur.

Je pense que le probleme vient que tu ne fermes pas les connexions.

------------------------------------------------

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

PersonnHelper helper = new PersonnHelper();

Personn personne = new Personn;
if (e.CommandName == "Delete")
        {
            personne.Id = Convert.ToInt64(e.CommandArgument);
            helper.SupprimerPersonn(filtre);
        }

 if (e.CommandName == "Update")
{
                personne.Id = Convert.ToInt64(e.CommandArgument);
                personne.Nom = (GridView1.Rows[GridView1.EditIndex].FindControl("txtNom") as TextBox).Text;
                personne.Prenom = (GridView1.Rows[GridView1.EditIndex].FindControl("txtPrenom") as TextBox).Text;
helper.ModifierPersonn(personne);
            }
//refresh Data
FillData();
}

--------------------------------------------------------------

Dans l'ASPX j'ai
  ' >
   
                       

----------------------------------------------------------------
Dans le helper
j'ai par exemple

    public virtual void Supprimer(Personn personn)
        {
const string SQL = @"DELETE FROM [dbo].[personne]
                                WHERE personn.id = @id";
            try
            {
                cmd = new Command;
                cmd.CommandText = SQL;
                cmd["@id"] = personn.Id;
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                  //log
            } 
            finally
            {
                    cmd.CloseConnection();
            }
0
lamagnifik Messages postés 3 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 19 décembre 2008
19 déc. 2008 à 10:29
Bonjour,

Je te remerci de m'avoir répondu.
J'ai vérifier mon code et je ferme bien mes connexions.
Mais sinon tu n'as rien vu d'anormal dans mon code en dehors de cette histoire de connexion ?
J'utilise un datagrid et je vois que tu as utilisé un gridView donc je vais essayer d'adater mon code à un gridView pour voir on ne sait jamais.

Ci dessous ma fonction  ExecuteQuery








///


<summary>






///
To execute an SQL Query






///


</summary>






///



SQL Query








public



void
ExecuteQuery(

String
query){


// SQL query






//String query = " INSERT INTO " + table + " FROM " + tableName + " ORDER BY " + orderby;






// Establish the connection

myConnection = openDb();







/**** Database treatments ****/






DataTable
mytable =

new



DataTable
();


SqlDataAdapter
myAdptater =

new



SqlDataAdapter
(query, myConnection);myAdptater.Fill(mytable);


// Close the connection

closeDb();


}




 
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
19 déc. 2008 à 19:06
Ok,

Ca va peut etre mieux structurer ta programmation, si tu appliques ma façon de programmer.
0
Rejoignez-nous