Probleme UP/INSERT/DELETE DGV-BindingList

flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010 - 4 juin 2010 à 12:02
imothepe_33 Messages postés 168 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 28 novembre 2012 - 8 juin 2010 à 15:13
Bonjour à tous !
J'ai un petit problème que je n'arrive tjr pas à résoudre...
Alors j'explique :
Deja j'ai :
- une interface
- une couche d'accès aux données (DAL)
- une couche models (qui contient mes objets & leurs constructeurs...)

J'ai une gridview que je charge avec les données d'une BindingList qui récupère ses données d'une requete simple (select * from A)
Une fois ces données chargées, j'aimerai arriver à effectuer des MAJ, des suppressions, des inserts, à partir de la gridview.
Donc les modifications sont effectués sur la BindingList et il faudrait pouvoir arriver à renvoyer les informations modifiés à la base de données.

Cepandant, je n'arrive tjr pas à trouver les méthodes (entre la bindingList et la BDD) qui me permettent d'effectuer ces changements, une idée ?

Merci d'avance !!

Si vous ne comprennez pas mon probleme, ici c'est expliqué différemment mais en anglais...

16 réponses

imothepe_33 Messages postés 168 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 28 novembre 2012 7
4 juin 2010 à 13:04
Salut. Si tu utilises un BindingList ça veut dire que tu utilises des BusinessObjects. Avant d'actualiser ton BindingList, tu dois valider les opérations effectuées dans la base de données.

Suit ce lien àa pourrais t'aider BindingList.


Only the strong survive !
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 13:17
Coucou, merci de la reponse, j'ai deja vu le topic :), mais ca ne m'apporte rien de concret, je connais les methodes pour ajouer dans la liste, mais une methode qui me permettrait lors d'une action sur la gridview de faire update,delete,insert, ca je n'ai pas trouvé :S, car par exemple pour une MAJ de données, j'ai besoin de l'ancienne ligne et de la nouvelle =/

Et je ne connais pas les "BusinessObjects"

:)
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 juin 2010 à 14:22
Salut,

De mémoire c'est ton objet DataAdapter qui entre en jeux
Je vais essayer de retrouver une petite source...
A plus
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 14:38
Yop, je n'utilise pas non plus de dataAdapter :)

Mais juste :

Une bindingList<monObjet> qui va recevoir des infos d'une table de BDD, j'affiche ces données dans une gridview, et maintenant je veux renvoyer les données modifiées de ma liste à ma base de données !

Voila :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 juin 2010 à 14:44
Voilà ! j'ai trouvé ceci !
J'espère que ça pourra t'aider...
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 juin 2010 à 14:52
Ha ok ! j'ai été un peu vite... j'ai fait fausse route
Je vais voir ça de plus près !
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 15:09
Merci bcp de deja t'intéresser au problème :)
J'utilisais avant les tableAdapters, DataTable avec es DataSets mais c'est des vraies boites noires et au niveau de l'évolution, sans être grossier, c'est pourri. (et puis les technologies sont relativement vieilles !)
0
imothepe_33 Messages postés 168 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 28 novembre 2012 7
4 juin 2010 à 15:39
Pour rappel "monObjet" est un BusinessObject. En supposant que tu as une table Personne et que tu as déjà créé tout ce qui est BO (PersonneBO), DAL (PersonneDAL) et BLL(PersonneBLL) (en créant des requêtes CRUD(Insert, Select, Update, Delete)), tu dois t'assurer d'avoir effectué les tâches suivantes dans ton interface graphique:

1/ Créer une liaison BindingSource entre ton DataGridView et ton BusinessObject
2/ Créer un objet de type
BindingList
qui sera utilisé pour stocker les données récupérée par ta requête Select (SelectPersonnes() par exemple).

Ensuite lors de l'initialisation de ta fenêtre , tu effectues les étapes suivantes:

1/ Initialisation de ton objet
BindingList
par exemple avec le code suivant:
BindingList listePersonne = new BindingList(personneBLL.SelectPersonne())

2/ Utilises l'objet BindingSource créé précédemment comme intermédiaire entre ton BindingList et ton DataGridView comme ceci:
tonObjetBindingSource.DataSource = listePersonne;
tonDataGridView.DataSource = tonObjetBindingSource;

A ce stade, ton datagridview et ta liste sont liés (pour le meilleur et pour le pire )

Une fois ceci fait, tu écriras les codes d'actualisations de ton interface comme suit:

1/ Pour l'insertion, tu vérifies d'abord si l'insertion s'est bien passée:
if(personneBLL.Insertion(taPersonne) != 0)
{
   listePersonne.Add(taPersonne);
}


2/ Pour la modification, tu vérifies d'abord si la modification s'est bien passée:
if(personneBLL.Modification(taPersonne) != 0)
{
    //tu récupère la ligne sélectionnés dans le DataGridView
   ((PersonneBO)tonDataGridView.CurrentRow.DataBoundItem).Nom =    nouvelleValeur 
//tu reprends la même chose pour tous les champs
   tonDataGridView.Refresh();
}


3/ Pour la suppression, tu vérifies d'abord si la suppression s'est bien passée:
//Tout dépend de comment tu as récris ta requete de suppression
if(personneBLL.Suppression(((PersonneBO)tonDataGridView.CurrentRow.DataBoundItem) != 0)
{
   //Etape importante, tu supprimes la ligne dans ta liste
    listePersonne.Remove(((PersonneBO)tonDataGridView.CurrentRow.DataBoundItem))
   //La suppression se fait automatiquement dans ton DataGridView
}


Un peut long mais j'espère que ça t'aideras... Merci

Only the strong survive !
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 juin 2010 à 15:40
BindingList<T> ne me semble pas être la bonne solution pour lier ta grille à une base de données... C'est plutôt réservé à lier une collection en mémoire !

Je te conseille de passer par le couple DataSet/DataAdapter qui est quand même plus approprié !! Et qui a fait ces preuves ^^

Pour quelle raison souhaites-tu utiliser BindingList<T> ??
Si c'est pour le côté "générique" tu peut très bien passer par un DataSet typé...

Désolé de ne pas pouvoir t'aider d'avantage !
Bon courage
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 15:47
imothepe_33
Exact, dans tout ce que tu as ecris, j'ai tout :)
Je vais essayer de voir pour ce que tu as après pour les CRUD ! Le truc, c'est que je vais me servir de quelle méthode pour effectuer l'ensemble des actions CRUD, à partir de la gridview :O
Merci !
Ludinski, j'ai la même base de données sur plusieurs serveurs...donc le coté "générique" est grandement apprécié pour ne pas refaire 50 fois la meme chose :P


Merci à tous pour les reponses rapides !!
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
4 juin 2010 à 15:54
Ben autant pour moi !
Je ne m'y connait pas du tout en BusinessObject...
Et visiblement, floflo tu en fait sans le savoir ^^

Donc merci imothepe pour les éclaircissements !
Et floflo ! ne tiens pas compte de mes posts !!!

Bonne journée à vous et bon WE ;)
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 15:57
Coté BLL j'ai ca :
 public void UpdateDifCAO(DiffCAOModels ObjNew, DiffCAOModels ObjOld, string strConnexion)
        {
            DiffCAODAL.UpdateDiffCAO(ObjNew, ObjOld, strConnexion);
        }

        public void InsertDifCAO(DiffCAOModels list, string strConnexion)
        {
            DiffCAODAL.InsertDiffCAO(list, strConnexion);
        }

        public void DeleteDifCAO(DiffCAOModels list, string strConnexion)
        {
            DiffCAODAL.DeleteDiffCAO(list, strConnexion);
        }


Jusqu'ici je ne vois pas de probleme :)

Coté DAL :
public static void UpdateDiffCAO(DiffCAOModels ObjNew, DiffCAOModels ObjOld, string strConnexion)
        {
            string Connexion = SelectConn(strConnexion);
            SqlConnection conn = new SqlConnection(Connexion);
    
            try
            {
                conn.Open();
                string request "UPDATE [INFOCENTRE].[dbo].[PAR_DIFF_CAO] SET [C_CODEX] @C_CODEX,[C_CODE_CAO] = @C_CODE_CAO,[C_NOM_RESP] = @C_NOM_RESP,[C_PRENOM_RESP] = @C_PRENOM_RESP,[C_MAIL_RESP] = @C_MAIL_RESP,[TYPE_RAPP] = @TYPE_RAPP WHERE [C_CODEX] = @C_CODEXOLD and [C_CODE_CAO] = @C_CODE_CAOOLD and [C_MAIL_RESP] = @C_MAIL_RESPOLD and [C_NOM_RESP] = @C_NOM_RESPOLD and [C_PRENOM_RESP] = @C_PRENOM_RESPOLD and [TYPE_RAPP] = @TYPE_RAPPOLD";

                List<SqlParameter> ListParam = new List<SqlParameter>();
                SqlCommand command = new SqlCommand(request, conn);
                command.CommandType = System.Data.CommandType.Text;
                ListParam.Add(new SqlParameter("@C_CODEX", ObjNew.C_CODEX));
                ListParam.Add(new SqlParameter("@C_CODE_CAO", ObjNew.C_CODE_CAO));
                ListParam.Add( new SqlParameter("@C_NOM_RESP", ObjNew.C_NOM_RESP));
                ListParam.Add(new SqlParameter("@C_PRENOM_RESP", ObjNew.C_PRENOM_RESP));
                ListParam.Add(new SqlParameter("@C_MAIL_RESP", ObjNew.C_MAIL_RESP));
                ListParam.Add(new SqlParameter("@TYPE_RAPP", ObjNew.TYPE_RAPP));

                ListParam.Add(new SqlParameter("@C_CODEXOLD", ObjOld.C_CODEX));
                ListParam.Add(new SqlParameter("@C_CODE_CAOOLD", ObjOld.C_CODE_CAO));
                ListParam.Add(new SqlParameter("@C_NOM_RESPOLD", ObjOld.C_NOM_RESP));
                ListParam.Add(new SqlParameter("@C_PRENOM_RESPOLD", ObjOld.C_PRENOM_RESP));
                ListParam.Add(new SqlParameter("@C_MAIL_RESPOLD", ObjOld.C_MAIL_RESP));
                ListParam.Add(new SqlParameter("@TYPE_RAPPOLD", ObjOld.TYPE_RAPP));
                command.Parameters.Add(ListParam);
                command.ExecuteNonQuery();

                conn.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


Le truc, c'est que dans la base de données pour cette table, tous les champs peuvent être modifiés, donc pas de clé primaire (me demandez pas pourquoi :D, c'est pas moi qui m'occupe de ca !)

Donc quelle serait la méthode pour me permettre d'appeler l'ensemble des CRUD de la BLL sans problèmes ?

Merci ;)
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 16:00
LUDINSKI
LOL, je savais que je faisais une BLL, mais BusinessObject, je ne connaissais pas le terme :P
Juste Business Logic Layer, mais j'aurai du m'en douter ^^,
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
4 juin 2010 à 16:11
J'ai dis n'importe quoi T_T
Je savais que je faisais des objets, mais qu'ils etaient appelé BusinessObject, je ne le savais pas
0
flofloS13 Messages postés 9 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 7 juin 2010
7 juin 2010 à 09:36
Personne pour m'aider dans l'utilisation des requetes CRUD à partir du Datagridview ??
0
imothepe_33 Messages postés 168 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 28 novembre 2012 7
8 juin 2010 à 15:13
Salut flofloS13. En parlant de CRUD il s'agit des requêtes habituelles utilisées dans les applis. de gestion. Tu as concrètement:

C: pour Create qui équivaut à la requête INSERT
R: pour Read qui équivaut à la requête SELECT
U: pour Update ...
D: pour Delete ...

Lors de la mise en place de l'architecture de ton application, dans ta DAL tu auras par défaut 4 fonctions représentant les fonctions CRUD. Suit ce lien tu trouveras des détails sur comment organiser ta solution dans "visual studio" pour une architecture en couches.
Pour comment utiliser les BindingLists télécharge ce code source , sur le site.

Merci et bonne réception.

Only the strong survive !
0
Rejoignez-nous