Ajouter une ROW a un dataGridView lié a une DataSource

Résolu
disciplined Messages postés 10 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 16 décembre 2010 - 2 juin 2010 à 02:24
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013 - 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
A voir également:

5 réponses

disciplined Messages postés 10 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 16 décembre 2010 2
2 juin 2010 à 22:29
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.
@++
3
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
2 juin 2010 à 12:00
Bonjour,

Utilises-tu des bindingSource?

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


Qui ne tente rien, n'a rien
0
disciplined Messages postés 10 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 16 décembre 2010 2
2 juin 2010 à 13:30
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
0
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
2 juin 2010 à 14:48
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
0

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

Posez votre question
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
2 juin 2010 à 23:49
Ok, pas de problème.
Amuse toi bien


Qui ne tente rien, n'a rien
0
Rejoignez-nous