Sauvegarder les enregistrement d'un data grid view (unbounded) dans une data tab [Résolu]

Signaler
Messages postés
12
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2009
-
Messages postés
12
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2009
-
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

Messages postés
12
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2009

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;
}

}
Messages postés
72
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
12 août 2009
2
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.
Messages postés
12
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2009

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!
Messages postés
72
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
12 août 2009
2
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.