Comment inserer valeur d'une textBox dans un case d'un dataGridView

damdecaen Messages postés 1 Date d'inscription lundi 22 novembre 2010 Statut Membre Dernière intervention 22 novembre 2010 - 22 nov. 2010 à 20:26
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 - 23 nov. 2010 à 08:00
Bonsoir,

la question est dans le titre...
Seulement je vais detailler d'avantage ma question...

Voila je créais un tableau avec un dataGridView et j'aimerais dans mon programme que l'utilisateur entre une donnée dans 2 textBox et une date dans un dateTimePicker et pour finir à l'appuis sur un bouton les valeurs se rangent sur une ligne dans mon tableau...

jusque la tout va a peu prés bien...

seulement le hic c que je crée mon tableau avec un bouton nouveau...

voila le code...

public partial class Form1 : Form
{
int Nbligne=0;


public Form1()
{
InitializeComponent();
}

private void confirmButton_Click(object sender, EventArgs e)
{

this.dataGridView.Rows.Add(dateTimePicker.Text,
designationTextBox.Text,
valeurTextBox.Text);



}

private void nouveauToolStripMenuItem_Click(object sender, EventArgs e)
{
// Charge une table vide dans la source des bindings
mainBindingSource.DataSource = CreerTable();

// Configure la navigation
mainBindingNavigator.BindingSource = mainBindingSource;

// Configure la grille de données sur la même source que la source de
// navigation
dataGridView.DataSource = mainBindingNavigator.BindingSource;
}

private DataTable CreerTable()
{
// Création d'une table vide avec le nom Compte
DataTable result = new DataTable("Compte");

// Création de la colonne ID

result.Columns.Add(new DataColumn("date", typeof(string)));
result.Columns.Add(new DataColumn("designation", typeof(string)));
result.Columns.Add(new DataColumn("Type", typeof(string)));
result.Columns.Add(new DataColumn("commentaire", typeof(string)));


// retour de la valeur
return result;

}

private void AjouteLigneATable(string LigneLue, DataTable TableDeDonnees)
{
// Definition de l'index de la position de lecture
int index = 0;
// Découper la ligne en fonction du caractère de séparation
string[] valeursLues = LigneLue.Split(new char[] { ';' });
// Crée une nouvelle ligne de données
DataRow ligneDeDonnees = TableDeDonnees.NewRow();
// Pour toute les valeurs, met à jour le ligne de données
foreach (string valeur in valeursLues)
{
switch (index++)
{
case 0:
ligneDeDonnees["Date"] = valeur.Trim();
break;
case 1:
ligneDeDonnees["Montant"] = valeur.Trim();
break;
case 2:
ligneDeDonnees["Type"] = valeur.Trim();
break;
case 3:
ligneDeDonnees["Commentaire"] = valeur.Trim();
break;
default:
ligneDeDonnees[string.Format("Colonne {0}", index)]
= valeur.Trim();
break;
}

}

// Ajoute la nouvelle ligne de données à la table
TableDeDonnees.Rows.Add(ligneDeDonnees);
}

private DataTable OuvrirFichier(string NomDuFichier)
{
// definition de la variable de retour
DataTable result = null;
// Definition et assignation des variables
string ligneLu = string.Empty;
Boolean estPremiereLigne = true;

using (System.IO.StreamReader sr =
new System.IO.StreamReader(NomDuFichier))
{
do
{
// Pour chaque ligne lu
ligneLu = sr.ReadLine();

// si c'est la première ligne lue,
// alors créé la table de donnée
if (estPremiereLigne && ligneLu != null)
{
result = CreerTable();
estPremiereLigne = false;
}

// Si la ligne de données n'est pas nulle,
// alors ajoute la ligne à la table de données
if (ligneLu != null)
AjouteLigneATable(ligneLu, result);

} while (ligneLu != null);

}

// renvoi de la valeur
return result;

}

private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileOpen =
new System.Windows.Forms.OpenFileDialog())
{
fileOpen.Filter = "Fichiers coach|*.mklr";
fileOpen.InitialDirectory = @"c:";

if (fileOpen.ShowDialog() == DialogResult.OK)
{

// Charge le fichier de données dans la source des bindings
mainBindingSource.DataSource =
OuvrirFichier(fileOpen.FileName);
// Configure la navigation
mainBindingNavigator.BindingSource = mainBindingSource;
// Configure la grille de données sur la même source
// que la source de navigation
dataGridView.DataSource
= mainBindingNavigator.BindingSource.DataSource;
// Mémorise le nom du fichier
nomFichier = fileOpen.FileName;
}
}
}

private void SauverFichier(string NomDuFichier)
{
// Utilisation d'un écrivain public !
using (System.IO.StreamWriter streamWriter
= new System.IO.StreamWriter(NomDuFichier, false))
{
// Balayage de l'ensemble des lignes de la table
for (int i = 0;
i < (mainBindingSource.DataSource as DataTable).Rows.Count;
i++)
{
// Concaténation de la ligne de texte
streamWriter.WriteLine(
string.Concat(
(mainBindingSource.DataSource as DataTable).Rows[i]["Date"], ";"
, (mainBindingSource.DataSource as DataTable).Rows[i]["Montant"]
== System.DBNull.Value ? "0" :
(mainBindingSource.DataSource as DataTable).Rows[i]["Montant"].ToString(), ";"
, (mainBindingSource.DataSource as DataTable).Rows[i]["Type"], ";"
, (mainBindingSource.DataSource as DataTable).Rows[i]["Commentaire"]
));
}

}

}

private void enregistrersousToolStripMenuItem_Click(object sender, EventArgs e)
{
using (SaveFileDialog fileSave = new SaveFileDialog())
{
fileSave.Filter = "Fichiers coach|*.mklr";
fileSave.InitialDirectory = @"c:";

if (fileSave.ShowDialog() == DialogResult.OK)
{
// Mémorise le nom du fichier
nomFichier = fileSave.FileName;
// Sauvegarde les informations
SauverFichier(nomFichier);

}
}
}

private void enregistrerToolStripMenuItem_Click(object sender, EventArgs e)
{
// Si le nom du fichier est n'existe pas (i.e. est vide)
if (nomFichier == string.Empty)
{
// route l'appel vers la sauvegarde avec selection du nom
this.enregistrersousToolStripMenuItem_Click(sender, e);
}
else
{
// Sauvegarde les informations
SauverFichier(nomFichier);
}
}

private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}

}

vous comprendrais surement que je ne suis pas un expert...
normalement ca devrais marcher mais quand j'execute mon programmme voula mon message d'erreur:

Impossible d'ajouter par programme des lignes à la collection de lignes DataGridView lorsque le contrôle est lié aux données.

pourriez vous apporter un correction a mon code s'il vous plaie!

merci de l'attention que vous porterez a mon probleme

Cordialement

Damien

1 réponse

Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
23 nov. 2010 à 08:00
D'après le message d'erreur, je dirais que le problème vient de cette partie du code:
private void confirmButton_Click(object sender, EventArgs e) 
{
   this.dataGridView.Rows.Add(dateTimePicker.Text, 
                              designationTextBox.Text, 
                              valeurTextBox.Text);
}


D'après ce que j'ai pu voir, tu utiles du databinding (ce dont je préconise à 100% :p) pour lier ta DataTable à ton grid. Dès lors, il faut mettre à jour ton objet "Source" et non ton grid directement. Tu auras donc quelque chose comme ceci:
private void confirmButton_Click(object sender, EventArgs e) 
{
   DataTable dsSource = mainBindingSource.DataSource as DataTable;
   if(dsSource != null)
   {
      //Ajout d'une nouvelle ligne dans ta table
   }
}



Shao.
0
Rejoignez-nous