Changer le nom des colonnes d'un datagrid

Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005 - 1 mars 2005 à 15:36
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005 - 2 mars 2005 à 16:34
Bonjour, je débute en VB.NET. Je voudrais modifier le nom des colonnes d'un datagrid. Voici l'erreur que j'ai quand je rempli le datagrid pour la deuxième fois mais le nom des colonnes change :
An unhandled exception of type 'System.Data.DuplicateNameException' occurred in system.data.dll


Additional information: A column named 'Nom_colonne' already belongs to this DataTable.

Merci.

19 réponses

cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
1 mars 2005 à 16:14
Private Sub AjoutDataGridTableStyle(ByVal ds As DataSet)



Dim tableStyle As New DataGridTableStyle

Dim dt As DataTable = ds.Tables(0)

tableStyle.MappingName = dt.TableName

Dim j As Integer



For j = 0 To dt.Columns.Count - 1



Dim cs As New DataGridTextBoxColumn

cs.MappingName = dt.Columns(j).ColumnName

cs.HeaderText = dt.Columns(j).ColumnName

cs.Width = 200

tableStyle.GridColumnStyles.Add(cs)



Next



DataGrid1.TableStyles.Clear()

DataGrid1.TableStyles.Add(tableStyle)



End Sub





cs.HeaderText dt.Columns(j).ColumnName nom de ta colonne

http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
1 mars 2005 à 16:26
Merci mais j'ai encore une erreur :
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in system.data.dll


Additional information: Cannot find table 0.
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
1 mars 2005 à 16:35
peux tu mettre le code qui te sers a remplir le datagrid

http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
1 mars 2005 à 16:53
Dim Colonne
As DataColumn

Dim ds
As
New DataSet()

Dim Table1
As DataTable



DataGrid1.PreferredColumnWidth = 150
Dim ligne
As Int16



Table1 =
New DataTable("Liste")



Dim Row
As DataRow


num_ligne = 0



For i = 1
To 200



If Tab_Colonne(i) <> ""
Then


Colonne =
New DataColumn(Tab_Colonne(i))


Colonne.DataType = System.Type.GetType("System.String")


Table1.Columns.Add(Colonne)



End
If
Next


Try
For ligne = 0
To num_ligne


Row = Table1.NewRow()



For i = 1
To 200

If Tab_Colonne(i) <> ""
Then
' Remplissage des cellules
Row.Item(Tab_Colonne(i)) = tab1(ligne, (i - 1))



End
If
Next


Table1.Rows.Add(Row)



Next
Catch
End
Try


ds =
New DataSet()


ds.Tables.Add(Table1)


DataGrid1.SetDataBinding(ds, "Liste")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
1 mars 2005 à 17:19
au lieu de DataGrid1.SetDataBinding(ds, "Liste") met datagrid1.datasource = ds.tables(0)

http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
1 mars 2005 à 17:42
j'ai encore une erreur a la ligne :


tableStyle.MappingName = Table1.TableName


An unhandled exception of type 'System.NullReferenceException' occurred in MAJ NNM.exe


Additional information: Object reference not set to an instance of an object.
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
1 mars 2005 à 17:44
Il n'existe pas une fonction qui permet d'initialiser les noms des colonnes??
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
1 mars 2005 à 18:25
Est ce qu'il vaut mieux faire dans ce style pour remplir le nom des colonnes :

Dim oTableau
As
New DataGridTableStyle()


oTableau.MappingName = "Utilisateur[]"



'Construire les différentes colonnes



Dim oColNom
As
New DataGridTextBoxColumn()


oColNom.MappingName = "Nom"


oColNom.HeaderText = "Nom"


oTableau.GridColumnStyles.Add(oColNom)
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
1 mars 2005 à 19:00
voici une facon de creer ton datatable car le tien n'a pas l'air stable



Dim MaTable As DataTable = New DataTable()


Dim myColumn As DataColumn = New DataColumn()


Dim myRow As DataRow





myColumn.DataType = System.Type.GetType("System.Int32")


myColumn.AllowDBNull = False


myColumn.Caption = "ID"


myColumn.ColumnName = "ID"


MaTable.Columns.Add(myColumn)





myColumn = New DataColumn()


myColumn.DataType = System.Type.GetType("System.String")


myColumn.Caption = "Description"


myColumn.ColumnName = "Description"


MaTable.Columns.Add(myColumn)





For i = 0 To (10)


myRow = MaTable.NewRow()


myRow("ID") = i


myRow("Description") = "Codes-Sources"


MaTable.Rows.Add(myRow)


Next





...





DataGrid1.DataSource = MaTable

http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
2 mars 2005 à 12:18
ok, ca c'est bon, ca marche sans probleme. Mais ensuite comment fais tu pour remplacer le nom des colonnes par d'autres? Produit une erreur quand il y a deux fois le meme nom. Je voudrais donc reinitialiser le datagrid ou le supprimer. Ou si tu as une autre idée...
Je te donne un exemple:
Nom | Prenom | Age : Premiere fois que je rempli le datagrid et ensuite je voudrais avoir :

Nom | Age | Prenom : Deuxieme fois.
Mais j'ai cette erreur :
An unhandled exception of type 'System.Data.DuplicateNameException' occurred in system.data.dll


Additional information: A column named 'Age' already belongs to this DataTable.
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 13:30
slt,

lorsque tu reremplis le datagrid pour la deuxieme fois tu n'a qua
pas passe dans la boucle qui renomme les colonnes. Sinon dans la
fonction qui remplit ton datagrid tu declare

Dim Dg as new datagrid

et a la fin tu fais datagrid1 = Dg



Pour le nettoyer completement je sais pas comment faire, je regarde



a+

http://www.correzeweb.com
http://www.localetv.com
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 13:39
je viens de tester cela



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim MaTable As DataTable = New DataTable

Dim myColumn As DataColumn = New DataColumn

Dim myRow As DataRow

Dim i As Integer



myColumn.DataType = System.Type.GetType("System.Int32")

myColumn.AllowDBNull = False

myColumn.Caption = "ID"

myColumn.ColumnName = "ID"

MaTable.Columns.Add(myColumn)



myColumn = New DataColumn

myColumn.DataType = System.Type.GetType("System.String")

myColumn.Caption = "Description"

myColumn.ColumnName = "Description"

MaTable.Columns.Add(myColumn)



For i = 0 To (10)

myRow = MaTable.NewRow()

myRow("ID") = i

myRow("Description") = "Codes-Sources"

MaTable.Rows.Add(myRow)

Next



DataGrid1.DataSource = MaTable



End Sub



Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim MaTable As DataTable = New DataTable

Dim myColumn As DataColumn = New DataColumn

Dim myRow As DataRow

Dim i As Integer



myColumn.DataType = System.Type.GetType("System.Int32")

myColumn.AllowDBNull = False

myColumn.Caption = "ID"

myColumn.ColumnName = "ID"

MaTable.Columns.Add(myColumn)



myColumn = New DataColumn

myColumn.DataType = System.Type.GetType("System.String")

myColumn.Caption = "Description"

myColumn.ColumnName = "Description"

MaTable.Columns.Add(myColumn)



For i = 0 To (20)

myRow = MaTable.NewRow()

myRow("ID") = i

myRow("Description") = "Codes-Sources"

MaTable.Rows.Add(myRow)

Next



DataGrid1.DataSource = MaTable

End Sub


Qd j'appuie sur le btn2 et apres sur le btn3 il ne me retourne aucuen erreur pourtant mon datatable a bien les memes noms.



tu devrais remettre le code que tu as ecris pour regarde et pour que je le teste.
http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
2 mars 2005 à 14:16
Voici le code :


For i = 1
To 200



If Tab_Colonne(i) <> ""
Then


myColumn =
New DataColumn()


myColumn.DataType = System.Type.GetType("System.String")


myColumn.AllowDBNull =
False


'Nom des colonnes
myColumn.ColumnName = Tab_Colonne(i)


MaTable.Columns.Add(myColumn)



End
If



Next



For ligne = 0
To num_ligne - 1



For i = 1
To 7



If Tab_Colonne(i) <> ""
Then


myRow = MaTable.NewRow()


myRow(Tab_Colonne(i)) = tab1(ligne, (i - 1))



End
If



Next



MaTable.Rows.Add(myRow)



Next


DataGrid1.DataSource = MaTable

Voici l'erreur que j'ai avec ce code :

An unhandled exception of type 'System.Data.NoNullAllowedException' occurred in system.data.dll


Additional information: Column 'Nom de la Premiere colonne' does not allow nulls.
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 14:35
c'est normal tu as

myColumn.AllowDBNull = False, cela veut dire que tu peut pas avoir une valeur null dans la colonne.



et tu as myRow(Tab_Colonne(i)) = tab1(ligne, (i - 1)), ton pb est que
tab1(ligne, (i - 1)) n'est jamais remplit par une valeur autre que
nothing








http://www.correzeweb.com
http://www.localetv.com
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 14:43
de plus tu cree 200 column et tu en remplit que 7. si tu veux faire comme cela enleve myColumn.AllowDBNull = False et met
myColumn.AllowDBNull = True.



De plus par convention on fait toujours commencer les tableaux a 0.


http://www.correzeweb.com
http://www.localetv.com
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 15:25
Const Lig As Integer = 3 'nombre de lignes

Const Col As Integer = 2 'nombre de colonnes



Dim MaTable As DataTable = New DataTable

Dim myColumn As DataColumn = New DataColumn

Dim myRow As DataRow



Dim Tab_Colonne(Col) As String 'Enregistre le nom des colonnes

Dim Tab_Lig(Lig, Col) As
String 'enregistre les valeur a mettre sur les lignes de la table



Dim i, a As Integer



For i = 0 To Col

Tab_Colonne(i) = "Colonne N° " & i

Next



For i = 0 To Col - 1

For a = 0 To Lig - 1


Tab_Lig(i, a) = "Ceci est ma colonne N° " & i & " et ma ligne
N° " & a

Next

Next



For i = 0 To Col - 1 'On ajoute les colonne a la table



myColumn = New DataColumn

myColumn.DataType = System.Type.GetType("System.String")

myColumn.AllowDBNull = True

myColumn.Caption = Tab_Colonne(i)

myColumn.ColumnName = Tab_Colonne(i)

MaTable.Columns.Add(myColumn)



Next



For a = 0 To Lig - 1



i = 0



myRow = MaTable.NewRow()

myRow(Tab_Colonne(Col - 2)) = Tab_Lig(i, a)

i += 1

myRow(Tab_Colonne(Col - 1)) = Tab_Lig(i, a)

MaTable.Rows.Add(myRow)



Next



DataGrid1.DataSource = MaTable



End Sub

http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
2 mars 2005 à 15:40
ca y est enfin : ca marche. J'ai juste un dernier petit problème : Comment fais tu pour enlever toutes les lignes des precedents chargements et n'avoir que les lignes du dernier ?
J'ai essaye avec :
MaTable.Rows.Clear()
MaTable.Columns.Clear()
MaTable.Clear()
MaTable.Reset()

mais ca me met quand meme les lignes precedentes.
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 15:46
ben normalement comme tu as new datatable en haut a chaque fois tu
repart avec une table vide, donc les lignes des passages precedent sont
effacées.
http://www.correzeweb.com
http://www.localetv.com
0
Elea74 Messages postés 23 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 20 avril 2005
2 mars 2005 à 16:34
Enfin ca marche parfaitement. Merci. J'avais une autre erreur dans mon prog.
MERCI BEAUCOUP.
0
Rejoignez-nous