IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

DataSet/DataTable : Copier le contenu d'une colonne vers un autre dataTable


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 71
    Points : 50
    Points
    50
    Par défaut DataSet/DataTable : Copier le contenu d'une colonne vers un autre dataTable
    Bonsoir à toutes et à tous,

    Pour des raisons diverses et variées, je voudrais réorganiser l'ordre des colonnes dans une DataTable déjà alimentée.

    J'avais testé ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (...)
      For Each indice As Integer In indices
                    Dim dc As DataColumn = dt.Columns.Item(indice)
     
                    dtRes.Columns.Add(dc)
     Next
    (...)
    En gros je prenais la dataColumn de ma première datatable (dt), et j'essayais de l'ajouter en tant que nouvelle colonne dans une nouvelle datatable fraîchement déclarée (dtRes)

    Mais j'ai un message d'erreur :
    La colonne 'n° 300040041600020490534' appartient déjà à un autre DataTable.
    Le message me fait penser que la DataColumn est un élément qui pointe toujours vers sa DataTable "de départ"...

    Dans ce cas comment peut-on copier simplement la colonne (en pointant son indice et non son nom, c'est important ) d'une table vers une autre table ? Ou autre alternative : peut-on modifier l'ordre des colonnes dans une datatable ?

    Merci pour vos réponses à l'avance !!

    Nico

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bon en regoogle-isant un peu plus, j'ai trouvé la méthode SetOrdinal, je pense que ça peut le faire comme ça ! Je teste et si c'est bon je reviens le valider ici !

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par nico1492 Voir le message
    Le message me fait penser que la DataColumn est un élément qui pointe toujours vers sa DataTable "de départ"...
    Normal, une instance de DataColumn ne peut pas appartenir à deux DataTable en même temps.

    Tu ne copies pas l'instance de DataColumn ici, tu la met dans une deuxième DataTable : sur un plan relationnel, cela n'aurait aucun sens (même si cela en a un d'un point de vue purement "objet"), donc il y a un blocage qui l'empêche.

    Donc, il faut que tu résinstancie une DataColumn avec les même propriétés, et que l'ajoute à ta table destinatrice.

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut permuter les colonnes d'un datatable
    bonjour nico1492
    Ah 1492,ca me dit quelque chose la du cours d'histoire.Christophe Colomb decouvre l'Amerique qui existait deja.
    Enfin moi j'ai decouvert Datable.Clone.
    Tu peux utiliser datable.clone pour creer un vrai clone de ta datable avec la structure des colonnes.
    Comme ca tu n'auras pas le message de l'inopportun datatable d'origine.

    Apres pour permuter des colonnes ,il te faut 2 "recipients" de donnees savoir :
    - 1er array qui contient les colonnes non-permutees recuperees du clone
    - 2eme array contiendra les colonnes permutees.
    On efface ensuite les colonnes du clone et on lui ajoute en le 2eme array.
    Apres en bloc on rapatrie les "donnees" du datable d'origine.

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
     
    Public Class Form1
    	Dim originalDataTable As DataTable
    	Dim resDT As DataTable
     
     
    	Private Sub btnTestDataTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestDataTable.Click
    		btnCloneDataTable.Enabled = False
    		'Cree DataTable test
    		originalDataTable = New DataTable
    		'Cree 5 colonnes
    		Dim col As DataColumn
     
    		For j As Integer = 0 To 4
    			col = New DataColumn
    			col.Caption = "ItemCol" & (j).ToString
    			col.ColumnName = "ItemCol" & (j).ToString
    			col.DataType = GetType(String)
    			originalDataTable.Columns.Add(col)
    		Next
    		'Fill avec 7 rows
    		Dim dr As DataRow
    		Dim k As Integer = 1
    		For i As Integer = 0 To 6
    			dr = originalDataTable.NewRow
    			For j As Integer = 0 To dr.ItemArray.Count - 1
    				dr.Item(j) = "Value" & k.ToString
    				k = k + 1
    			Next
    			originalDataTable.Rows.Add(dr)
    		Next
    		Me.DataGridView1.DataSource = originalDataTable
     
    		btnCloneDataTable.Enabled = True
    	End Sub
     
     
     
    	Private Sub btnCloneDataTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloneDataTable.Click
    		'cree un clone de myDatable pour eviter 
    		'la double appartenance
    		'ce clone copie seulement les colonnes(sans donnees)
    		resDT = originalDataTable.Clone()
     
    		'copie les colonnes de resDT dans arrCol
    		Dim arrCol(resDT.Columns.Count) As DataColumn
    		resDT.Columns.CopyTo(arrCol, 0)
     
    		'un array vide pour les colonnes apres permutation 
    		Dim arrPermut(resDT.Columns.Count) As DataColumn
    		'"permutator" on fait ce qu'on veut
    		For i As Integer = 0 To arrCol.Length - 1
    			arrPermut(i) = arrCol(i)
    			If i = 3 Then
    				'effectue permutation 0 & 3
    				arrPermut(0) = arrCol(i)
    				arrPermut(i) = arrCol(0)
    			ElseIf i = 4 Then
    				'effectue permutation 2 & 4
    				arrPermut(2) = arrCol(i)
    				arrPermut(i) = arrCol(2)
    			End If
    		Next
    		'Efface colonnes intiales
    		resDT.Columns.Clear()
    		'Ajoute à resDT colonnes permutees stores dans arrPermut 
    		resDT.Columns.AddRange(arrPermut)
    		'mantenant on rapatrie les "data" de myDataTable(3 lignes de code)
    		For Each dr As DataRow In originalDataTable.Rows
    			resDT.ImportRow(dr)
    		Next
    		Me.DataGridView2.DataSource = resDT
    		Me.TextBox1.Clear()
    		For Each dc1 As DataColumn In resDT.Columns
    			Me.TextBox1.Text = Me.TextBox1.Text & dc1.ColumnName & " - " & dc1.Ordinal.ToString & vbCrLf
    		Next
    	End Sub
    End Class
    A la prochaine annee 2492.....
    bon code.....................

Discussions similaires

  1. Copier le contenu d'une colonne vers une autre table
    Par papay dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2009, 16h27
  2. [MySQL] Copier le contenu d une base vers une autre
    Par joboy84 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/07/2008, 11h28
  3. [VBA-E]Copier le contenu d'une cellule vers une autre
    Par idir.17 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 26/03/2007, 16h50
  4. Réponses: 12
    Dernier message: 22/02/2006, 15h28
  5. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo