Bonjour,
Je tente de faire quelque chose de tout bête, mais je ne trouve pas de solution.
Voilà, j'ai 3 datatables resultant de calculs ayant des bases différentes, ainsi suite à ces 3 "cas" on veut pouvoir calculer l'origine des écarts issu de ses 3 bases, est ainsi voir l'influence des différent paramètres.
Je me suis donc fait un exemple de test, pour me développer une fonction qui va me combiner les résultats de certaines colonnes issu de ces 3 datatables.
Voici mon exemple "source" représentant mes 3 datatables limité en nombre de colonnes afin de me concentrer sur la fonction de copie.
Je travaille donc sur ma fonction Combine datatable, qui va avoir pour but de dupliquer les 3 colonnes (id,Nomid,val) du 1er datatable, la colone valeur du 2ème datatable, la colone sansnom du 3eme datatable dans le nouveau datatable à partir d'un identifiant commun au 3 datatable : id
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
81
82
83
84
85
86
87
88
89
90
91
92
93 Dim Dt1 As New DataTable Dim Dt2 As New DataTable Dim Dt3 As New DataTable Dim r As DataRow With Dt1 .Columns.Add("id", GetType(Long)) .Columns.Add("Nomid", GetType(String)) .Columns.Add("val", GetType(Integer)) r = .NewRow r("id") = 1 r("Nomid") = "item1" r("val") = 1 .Rows.Add(r) r = .NewRow r("id") = 2 r("Nomid") = "item2" r("val") = 10 .Rows.Add(r) r = .NewRow r("id") = 3 r("Nomid") = "item3" r("val") = 15 .Rows.Add(r) End With '--- With Dt2 .Columns.Add("id", GetType(Long)) .Columns.Add("Nomid", GetType(String)) .Columns.Add("valeur", GetType(Integer)) r = .NewRow r("id") = 1 r("Nomid") = "item1" r("valeur") = 100 .Rows.Add(r) r = .NewRow r("id") = 2 r("Nomid") = "item2" r("valeur") = 1000 .Rows.Add(r) r = .NewRow r("id") = 3 r("Nomid") = "item3" r("valeur") = 105 .Rows.Add(r) End With With Dt3 .Columns.Add("id", GetType(Long)) .Columns.Add("Nomid", GetType(String)) .Columns.Add("sansnom", GetType(Integer)) r = .NewRow r("id") = 1 r("Nomid") = "item1" r("sansnom") = -58 .Rows.Add(r) r = .NewRow r("id") = 2 r("Nomid") = "item2" r("sansnom") = 5612 .Rows.Add(r) r = .NewRow r("id") = 3 r("Nomid") = "item3" r("sansnom") = 0 .Rows.Add(r) End With Dim lst1 As New List(Of String) lst1.Add("id") lst1.Add("Nomid") lst1.Add("val") Dim lst2 As New List(Of String) lst2.Add("valeur") Dim lst3 As New List(Of String) lst3.Add("sansnom") CombineDatatable(Dt1, lst1, Dt2, lst2, Dt3, lst3, "id")
Le résultat final devant me donner :
id / Nomid / Val / valeur / sansnom
1 / item1 / 1 / 100 / -58
2 / item2 / 2 / 1000 / 5612
3 / item3 / 3 / 105 / 0
Voici donc ce que j'ai commencer à faire et ou mon problème ce pose :
Mon soucis est que je ne peux pas effectuer de copie specifique à une colonne et l'intégré dans un autre datatable, j'ai donc tenté de recréer la structure des colonnes que je veux recopier pour ensuite remplir par les données, mais voilà dès que je veux copier la structure d'une colonne pour la mettre dans mon datatable final, je ne peux pas car celle-ci est toujours lié au datatable d'origine (d'ou mon clone pour voir si je pouvais m'en détacher). je ne trouve pas de moyen à par recopier une à une les différentes propriétés.
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 Private Function CombineDatatable(ByRef dtSrcBoucle As DataTable, ByVal lstNomColBoucleToCopy As List(Of String), _ ByRef dt2 As DataTable, ByVal lstNomColDt2ToCopy As List(Of String), _ ByRef dt3 As DataTable, ByVal lstNomColDt3ToCopy As List(Of String), _ ByVal strNomColCommunRelation As String) As DataTable Dim dtFinal As DataTable = New DataTable 'dtFinal = dtSrcBoucle.Clone() Dim arrayCol(dt2.Columns.Count - 1) As DataColumn dt2.Clone.Columns.CopyTo(arrayCol, 0) For Each col As DataColumn In arrayCol If lstNomColBoucleToCopy.Contains(col.ColumnName) Then dtFinal.Columns.Add(col) Next Dim rowsTrouver As DataRow() = Nothing For i As Integer = 0 To dtSrcBoucle.Rows.Count - 1 rowsTrouver = dt2.Select(strNomColCommunRelation & "=" & dtSrcBoucle.Rows(i)(strNomColCommunRelation)) If rowsTrouver.Length > 0 Then End If Next End Function
Merci d'avance pour votre précieuse aide !
Partager