Sauvegarder les enregistrement d'un data grid view (unbounded) dans une data tab

Résolu
cs_chalmyl Messages postés 12 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 29 juillet 2009 - 26 juil. 2009 à 13:32
cs_chalmyl Messages postés 12 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 29 juillet 2009 - 28 juil. 2009 à 16:57
Bonjour à tous,

J'essai de sauvegarder les enregistrement d'un data grid view (unbounded) dans une data table. Voici ce que j'ai jusqu'à maintenant:

private void btnSave_Click(object sender, EventArgs e)
{
DialogResult myResult;
myResult = MessageBox.Show("The records will be saved for processing.", "Delete Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

if (myResult == DialogResult.OK)
{
DataTable dt = new DataTable();
DataRow dr = null;
for (int j = 0; j < (this.dgv.RowCount - 1); j++)
{
dr = dt.NewRow();
if (j < 1)
{
for (int k = 0; k < this.dgv.ColumnCount; k++)
{
dt.Columns.Add();
}
}
for (int i = 0; i < this.dgv.ColumnCount; i++)
{
dr = this.dgv[i, j].Value.ToString(); ;
}
if (j > 0)
dt.Rows.Add(dr);
}
util.CansimInsert(dr);
dgv.Refresh();
}
else
{
return;
}

}



Mon problème est avec la ligne suivante:
dr = this.dgv[i, j].Value.ToString();
Error message: Cannot implicitly convert type 'string' to 'System.Data.DataRow'

Quelqu'un peut m'aider?

4 réponses

cs_chalmyl Messages postés 12 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 29 juillet 2009
28 juil. 2009 à 16:57
Oups... voici mon code final:

private void btnSave_Click(object sender, EventArgs e)
{
DialogResult myResult;
myResult = MessageBox.Show("The records will be saved for processing.", "Delete Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

if (myResult == DialogResult.OK)
{
DataTable dt = new DataTable();
DataRow dr = null;
for (int j = 0; j < (this.dgv.RowCount - 1); j++)
{
dr = dt.NewRow();
if (j < 1)
{
for (int k = 0; k < this.dgv.ColumnCount; k++)
{
dt.Columns.Add();
}
}
for (int i = 0; i < this.dgv.ColumnCount; i++)
{
dr[i] = this.dgv[i, j].Value.ToString(); ;
}
if (j > 0)
dt.Rows.Add(dr);
}
util.CansimInsert(dr);
dgv.Refresh();
}
else
{
return;
}

}
3
Minotthor Messages postés 72 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 12 août 2009 2
27 juil. 2009 à 04:42
Bonjour,

Si je ne m'abuse, vous êtes en train de lui dire de convertir un String en DataRow et de remplacer le DataRow dr par le String. Comprenez que cela ne lui plaît pas. Ecrire une chaîne de caractères dans une cellule d'une ligne, ce n'est pas la même chose que de remplacer la ligne elle-même par la chaîne de caractères.

Si j'ai bien compris votre code, vous devriez plutôt essayer :
dr[i] = this.dgv[i, j].Value.ToString();

Par ailleurs, savez vous que DataGridView.DataSource et DataBinding permettent de remplir votre DataGridView à partir de la DataTable et de mettre à jour la DataTable à partir des modifications effectuée sur le DataGridView, et tout ça automatiquement ? Ca vous faciliterait la vie.

Mathieu.
0
cs_chalmyl Messages postés 12 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 29 juillet 2009
28 juil. 2009 à 01:16
Ben oui... ça fonctionne!! Merci beaucoup!!

La data table créée est une table temporaire. Je ne m'y connais pas beaucoup alors j'ai pris le chemin de plus simple pour moi pour le moment. Je dois livrer à la fin de la semaine...

Merci encore!
0
Minotthor Messages postés 72 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 12 août 2009 2
28 juil. 2009 à 02:39
Pensez à valider la réponse pour que d'autres contributeurs n'arrivent pas sur la page pleins d'enthousiasme pour résoudre un problème déjà résolu.

Mathieu.
0
Rejoignez-nous