Ajouter une ROW a un dataGridView lié a une DataSource [Résolu]

disciplined 10 Messages postés mardi 1 juin 2010Date d'inscription 16 décembre 2010 Dernière intervention - 2 juin 2010 à 02:24 - Dernière réponse : cs_Tolliap 60 Messages postés lundi 4 décembre 2006Date d'inscription 11 janvier 2013 Dernière intervention
- 2 juin 2010 à 23:49
Bonjour,

Je remplis un DataGridView à l'aide d'une requête et donc je le lie à un DataSet. Cependant j'aimerais laisser la possibilité à l'utilisateur, en plus de consulter les données, d'en ajouter de nouvelles.
Or du fait de son lien avec une DataSource, y ajouter une nouvelle DataRow lève une exception.
Je pourrais ajouter les nouvelles lignes directement dans le DataSet cependant je voudrais avoir recours à un DataGridViewComboBoxCell, ce qui semble incompatible avec un DataSet.
Il me semble donc que la solution réside dans le "relachement" de la DataSource. Qui pourrait comment annuler la propriété DataSource à "la volée".
Merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
disciplined 10 Messages postés mardi 1 juin 2010Date d'inscription 16 décembre 2010 Dernière intervention - 2 juin 2010 à 22:29
3
Merci
Re Tolliap,

Il s'avère en fait que mon idée était d'une débilite totale . Un DataGridView est trop intimement lié à son DataSource pour pouvoir mettre cette relation "en pause" temporairement. Je m'en suis rendu compte en testant :
monDataGridView.DataSource = null

et alors le DataGrid devient vierge.C'est en gros tout ou rien.
Donc en fait si on veut modifier pouvoir modifier les données d'un DataGridView il faut pas qu'il soit lié à une source et donc le construire à l'ancienne a partir du DataSet de la requête.
DataGridView demarcheDataGrid ;
DataSet demarcheDS;

foreach (DataColumn column in demarcheDS.Tables[0].Columns)
            {
                demarcheDataGrid.Columns.Add(column.ColumnName, column.ColumnName);
            }
int i = 0;
foreach (DataRow row in demarcheDS.Tables[0].Rows)
            {
                demarcheDataGrid.Rows.Add();
                for (int j = 0; j < row.ItemArray.Length; j++)
                {
                    demarcheDataGrid.Rows[i].Cells[j].Value = row.ItemArray[j];                    
                }               
                i++;
            }

Après on est libre de faire ce que l'on souhaite avec ce DataGridView.

En gros c'était une question qui n'avait pas lieu d'être. Merci cependant pour ton intérêt.
@++

Merci disciplined 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de disciplined
cs_Tolliap 60 Messages postés lundi 4 décembre 2006Date d'inscription 11 janvier 2013 Dernière intervention - 2 juin 2010 à 12:00
0
Merci
Bonjour,

Utilises-tu des bindingSource?

Si c'est le cas, essaie : MaBindingSource.AddNew();


Qui ne tente rien, n'a rien
Commenter la réponse de cs_Tolliap
disciplined 10 Messages postés mardi 1 juin 2010Date d'inscription 16 décembre 2010 Dernière intervention - 2 juin 2010 à 13:30
0
Merci
Bonjour Tolliap,

Merci d'avoir pris le temps de te pencher sur la question. Pour être honnête je me suis un peu eloigne de la méthodologie du MSDN préconisant les DataTableAdapter et les BindingSources (qui me paraissent redondants avec les DataSource) préférant travailler avec les DataSet permettant de liberté.
Il me faudrait plus une manipulation retirant au contraire les liens entre le DataGridView et toute source de données lorsque j'appuie sur le bouton "Nouvelle ligne".
Du genre
[*] monDataGrid.DataSource = null; (déontologiquement bizarre)
[*] ou monDataGrid.Dispose() ou une fonction du style Release() qui ôterait le lien avec la source de données.
Bref une astruce que je suppose toute simple pour m'éviter d'avoir à faire une copie du DataGridView et la calquer par dessus l'original au moment ou on veut ajouter une ligne.

Merci
Commenter la réponse de disciplined
cs_Tolliap 60 Messages postés lundi 4 décembre 2006Date d'inscription 11 janvier 2013 Dernière intervention - 2 juin 2010 à 14:48
0
Merci
Re,

Ok, je comprend.
Autre question, Que met tu dans la datasource de ta grid? DataTable?
Si c'est une datatable, essai ceci : (ds = MonDataSet)

DataRow row = ds.Tables[0].NewRow();
ds.Tables[0].Rows.InsertAt(row, 0);


Qui ne tente rien, n'a rien
Commenter la réponse de cs_Tolliap
cs_Tolliap 60 Messages postés lundi 4 décembre 2006Date d'inscription 11 janvier 2013 Dernière intervention - 2 juin 2010 à 23:49
0
Merci
Ok, pas de problème.
Amuse toi bien


Qui ne tente rien, n'a rien
Commenter la réponse de cs_Tolliap

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.