Bonsoir,
Je rencontre un petit problème : après avoir affecté des DataTables dans des GridView, j'édite le style des lignes en fct de certains critères.
Malheureusement ces modifs n'ont pas l'air d'être prises en considération. Mon programme initial est assez complexe et fait appel à des requêtes SQL.
Du coup, j'ai écrit un petit bout de code pour montrer mon soucis (ce exemple est complet et peut être exécuté tel quel)...
Il y a 2 choses qui me chiffonne :
1- Dans le Form_load : après avoir affecté la DataTable en source, la méthode count du GridView me renvoie 0. Dans le form_load, les modifs dans les cellules ou sur le style, ne sont pas prises en compte.
2- Une fois que le timer se déclenche, la page active est mise à jour mais pas les autres. Si on clique par exemple sur la page 5 avant le timer, la page 5 est rafraichie mais aussi la page 1 (qui elle, n'est pas active). Les autres pages restent avec le texte en noir...
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 Public Class Form1 Private Clock As New Timer Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim TabCtrl As New TabControl With {.Padding = New Point(14, 10), .Dock = DockStyle.Fill} AddHandler Clock.Tick, AddressOf ClockEvent For i = 1 To 5 ' Création de 5 pages Dim p As New TabPage With {.Text = "Page_" + i.ToString} With p Dim dtaTable As New DataTable("Essai" + i.ToString) Dim dtaView As New DataGridView With {.Dock = DockStyle.Fill, .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill} For j = 1 To 3 dtaTable.Columns.Add("Col_" + j.ToString) Next j For k = 0 To 15 dtaTable.Rows.Add("Nom " + i.ToString + k.ToString, "Prenom " + i.ToString + k.ToString, Now()) Next k dtaView.DataSource = dtaTable ' Ceci ne fonctionne pas car dtaView.Rows.Count = 0... pourquoi ? ' Par contre, dans la methode du timer, rows.count = 17 dans chaque grid For Each row As DataGridViewRow In dtaView.Rows If (row.Index And 1) = 1 Then row.DefaultCellStyle.ForeColor = Color.Red Next p.Controls.Add(dtaView) End With TabCtrl.TabPages.Add(p) ' Ajout de la page Next Me.Controls.Add(TabCtrl) ' Ajout du TabControl dans le form ' on lance le timer pour le test Clock.Interval = 3000 Clock.Start() End Sub Private Sub ClockEvent() Dim dtaView As DataGridView Dim NbPage As Integer = CType(Me.Controls.Item(0), TabControl).TabPages.Count Me.Text = "NbPage:" + NbPage.ToString + " Nb de lignes dans les GridView : " ' On passe toutes les lignes de chaque grid en rouge For i = 0 To NbPage - 1 dtaView = CType(Me.Controls.Item(0), TabControl).TabPages(i).Controls(0) For Each row As DataGridViewRow In dtaView.Rows row.DefaultCellStyle.ForeColor = Color.Red Next ' le nb de ligne dans les grid est correct alors qu'il ne l'etait pas dans le form_load Me.Text += dtaView.Rows.Count.ToString + "," Next i Clock.Stop() End Sub End Class
Partager