Comment inserer valeur d'une textBox dans un case d'un dataGridView
damdecaen
Messages postés1Date d'inscriptionlundi 22 novembre 2010StatutMembreDernière intervention22 novembre 2010
-
22 nov. 2010 à 20:26
Shaolyne
Messages postés155Date d'inscriptionjeudi 12 mai 2005StatutMembreDerniè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;
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");
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);
// 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"]
));
}
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);
}
}
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
A voir également:
Comment inserer valeur d'une textBox dans un case d'un dataGridView
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
}
}