Bonjour à tous, Salut olsimare,
Comment faire pour modifier (par code) le type d'une colonne dans un DtGridView, une fois qu'il est créé et rempli ?
Merci à tous.
Bonjour à tous, Salut olsimare,
Comment faire pour modifier (par code) le type d'une colonne dans un DtGridView, une fois qu'il est créé et rempli ?
Merci à tous.
Pour préciser ma question, il s'agirait de récupérer dans un dataGridView les données depuis une datatable pour des questions de rapidité :
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 Public Sub Remplissage() Dim sr = New StreamReader(Main.strPath & "Colonnes.txt", System.Text.Encoding.Default) Do Until sr.Peek = -1 Str = sr.ReadLine() Dim c0 = New DataColumn(Str) dtbl.Columns.Add(c0) Loop sr.Close() Dim sr = New StreamReader(StrFile, System.Text.Encoding.Default) Do Until sr.Peek = -1 Str = sr.ReadLine() Main.SubChaine = Str.Split(Main.Delim) dtbl.Rows.Add(Main.SubChaine) Loop DGV.DataSource = dtbl End Sub
Sauf que je dois affecter à ce dataGridView des colonnes particulières :
Je me sens donc obliger de remplir ma DGV comme ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Sub Colonnes() Dim sr = New StreamReader(Main.strPath & "Colonnes.txt", System.Text.Encoding.Default) Do Until sr.Peek = -1 Str = sr.ReadLine() Dim c1 As New FormulaDGVColumn c1.HeaderText = Str Me.DGV.Columns.Add(c1) Loop sr.Close() End Sub
Comment mélanger les 2 méthodes (Colonnes Perso + Données depuis une DataTable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim sr = New StreamReader(StrFile, System.Text.Encoding.Default) Do Until sr.Peek = -1 Str = sr.ReadLine() SubChaine = Str.Split(";") Me.DGV.Rows.Add(SubChaine) Loop sr.Close()
Merci.
Re.
Tu dois déclarer les colonnes de ton DGV avant d'alimenter le datasource (il n'est pas possible de changer le type d'une colonne existante) et positionner le datagridview.AutoGenerateColumns à False.
Ensuite, tu dois faire pour chaque colonne le bind avec la source comme ceci :
Cdt.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Tacolonne.DataPropertyName = "LeNomDeLaColonneEnDatatable"
Merci Olsimare, ca fonctionne.
Seul soucis, comme mes colonnes personnalisées (que tu connais) contiennent des cellules personnalisées ayant une fonction :
Du coup, au lancement le DGV qui contient bien les données n'affiche que la première ligne (car le pointeur par défaut se trouve en cellule (0,0) et active une seul fois cette même fonction.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, _ ByRef cellStyle As DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, _ ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As DataGridViewDataErrorContexts) As Object ... End Function
Il faudrait donc contourner cette fonction juste au lancement...
Cdt.
Bonjour.
Oui, enfin je les connais pas plus que ça! Comme les autres lecteurs de ce post d'ailleurs (faut pas oublier que c'est un forum
).
Je ne vois pas pourquoi ça ne fonctionnerait pas et je ne comprends pas cette histoire de pointeur. Qu'obtiens tu exactement ? Une seule ligne affichée ou plusieurs lignes dont seule la prémiére est alimentée correctement ?
Cdt.
Le DataGridView est bien rempli mais seule la première ligne est affichée.
Je sais qu'il est rempli car dès que je clique sur une cellule "vide" son contenu s'affiche.
Ce phénomène provient de la fonction que je mentionnais :
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 Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, _ ByRef cellStyle As DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, _ ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As DataGridViewDataErrorContexts) As Object If Me.RowIndex < 0 Then Return Nothing End If Dim s As String = CStr(Me.Value) 'Hors Saisie Formule If DocSaisie.boolFormula Then Return s End If If s = Nothing Then Return Nothing End If If s = "=" Then Return s End If If s.StartsWith("=") Then 'Appel de la Fonction AttribVal() Dim StrCal As String = AttribVal(s, Me.RowIndex) Dim Evl As New Eval3.Evaluator Try Return CStr(Evl.Parse(StrCal).value) 'Si Attribution de Valeur Impossible : Cellule Cible = Vide Catch ex As Exception Me.Value = "" MessageBox.Show("Formule erronée.") Return Nothing End Try Else Return s End If End Function
car si je la masque tout s'affiche normalement.
Je pense que la première ligne est visible à cause de la cellule (0,0) qui est automatiquement (par défaut) sélectionnée au lancement du DGV.
Il déclenche la sélection des autres cellules de la ligne (c'est ne fonction que j'ai faite) et ces sélections appellent la fonction ci-jointe qui retoune s.
Comment faire ?
Merci.
Partager