Bonjour tout le monde,
Je travail sous Visual studio 2003 donc j'utilise un dataGrid qui peut contenir des données rentré auparavent dans la base de données SqlServer2000.
Mon dataGrid peut soit afficher des données d'une base(jusque la aucun problème) mais on peut également remplir le dataGrid via une comboBox et une textBox.
Voici le code d'insertion des données de la base dans le dataGrid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private void NumInter_TextChanged(object sender, System.EventArgs e) { string PieceDetachee = ("SELECT PD_DESIGNART as Désignation, PC_QTECONSO as quantité, CONVERT(varchar(10), PC_PU1MOMEN, 0) as Prix_HT, CONVERT(varchar(10), PC_PU2MOMEN, 0) as Prix_TTC, PC_REMISE as Remise FROM PIECE_DETACHEE, PIECE_CONSOMMEE WHERE PIECE_DETACHEE.PD_CODART = PIECE_CONSOMMEE.PC_CODART AND PC_NUMINTER = '" + NumIntervention.Text + "'"); connection.Open(); try { SqlDataAdapter dataAdapter2 = new SqlDataAdapter(PieceDetachee, connection); dataAdapter2.Fill(dt2); dataGrid3.DataMember = "PieceDetachee"; dataGrid3.DataSource = dt2; liste.Add(DesArt.Text); DataGridTableStyle ts = new DataGridTableStyle(); this.dataGrid3.TableStyles.Add(ts); ts.MappingName=dt2.TableName; this.dataGrid3.DataSource=dt2; this.dataGrid3.TableStyles[0].GridColumnStyles[0].Width = 120; this.dataGrid3.TableStyles[0].GridColumnStyles[1].Width = 52; } catch(Exception ex) { MessageBox.Show(ex.ToString()); } finally { connection.Close(); } }
Voici le code qui me permet de remplir le même dataGrid via ma comboBox et ma textBox :
Lorsque je souhaite inséré un nouveau article via ma comboBox, voici le message d'erreur que j'obtient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 private void Qte_TextChanged_1(object sender, System.EventArgs e) { connection.Open(); SqlParameter paramPU1 = new SqlParameter("@PU1", SqlDbType.Money); decimal d = Convert.ToDecimal(label17.Text, System.Globalization.CultureInfo.InvariantCulture); paramPU1.Value = d; SqlParameter paramPU2 = new SqlParameter("@PU2", SqlDbType.Money); decimal d1 = Convert.ToDecimal(label18.Text, System.Globalization.CultureInfo.InvariantCulture); paramPU2.Value = d1; string strSql1 = string.Format("INSERT INTO PIECE_CONSOMMEE(PC_CODART, PC_NUMINTER, PC_QTECONSO, PC_PU1MOMEN, PC_PU2MOMEN) VALUES('"+CodArt.Text+"', '"+NumIntervention.Text+"','"+Qte.Text+"', {0}, {1})", paramPU1.ParameterName, paramPU2.ParameterName); SqlCommand cmd = new SqlCommand(strSql1, connection); cmd.Parameters.Add(paramPU1); cmd.Parameters.Add(paramPU2); cmd.ExecuteNonQuery(); string PieceDetachee = ("SELECT PD_DESIGNART as Désignation, PC_QTECONSO as quantité, CONVERT(varchar(10), PC_PU1MOMEN, 0) as Prix_HT, CONVERT(varchar(10), PC_PU2MOMEN, 0) as Prix_TTC, PC_REMISE as Remise FROM PIECE_DETACHEE, PIECE_CONSOMMEE WHERE PIECE_DETACHEE.PD_CODART = PIECE_CONSOMMEE.PC_CODART AND PC_NUMINTER = '" + NumIntervention.Text + "'"); try { SqlDataAdapter dataAdapter3 = new SqlDataAdapter(PieceDetachee, connection); dataAdapter3.Fill(dt2); dataGrid3.DataSource = dt2; dataGrid3.DataMember = "PieceDetachee"; liste.Add(DesArt.Text); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } finally { connection.Close(); } } } catch(Exception) { MessageBox.Show("erreur--> article déja existant"); } finally { connection.Close(); } }
La ligne 1369 correspond à :System.ArgumentException: Impossible de créer une liste enfant pour le champ PieceDetachee.
at System.Windows.Forms.BindingContext.EnsureListManager(Object dataSource, String dataMember)
at System.Windows.Forms.BindingContext.get_Item(Object dataSource, String dataMember)
at System.Windows.Forms.DataGrid.Set_ListManager(Object newDataSource, String newDataMember, Boolean force, Boolean forceColumnCreation)
at System.Windows.Forms.DataGrid.Set_ListManager(Object newDataSource, String newDataMember, Boolean force)
at System.Windows.Forms.DataGrid.set_DataMember(String value)
at SuiviClient_DistribInfo.SuiviIntervention.Qte_TextChanged_1(Object sender, EventArgs e) in c:\documents and settings\fils\mes documents\visual studio projects\suiviclient_distribinfo\suiviintervention.cs:line 1369de la deuxième partie du code(code insérant donnée via comboBox et textBox).
Code : Sélectionner tout - Visualiser dans une fenêtre à part dataGrid3.DataMember = "PieceDetachee";
Je vois pas ce que je peux faire pour régler mon problème??
Aidez moi s'il vous plais!!
Cordialement!!
Partager