Salut la team,
A cause du taff, j'ai pas assez de temps pour creuser le sujet, mais j'ai lu les centaines de posts + MSDN et rien n'y fait !
J'ai une DGV qui contient une colonne de date, bien-sur au format dd/mm/yyyy (sinon y'a pas de soucis au format ricain : yyyy/mm/dd)
Et qui est bien-sur trier selon une string... comme d'hab quoi :/
Donc j'ai tester les astuces MSDN :
https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx et tous les autres posts d'internet.
Cependant y'a rien qui marche et cela commence à me gaver de perdre autant de temps sur un problème aussi simple !
Du coup je viens vers vous pour m’éclairer sur mes bêtises.
Postulat :
1-la dgv est un user control hérité de datagridview.
2-cette dgv est peuplé par un datable via un bindingSource (pour le filtrage)
j'ai évidement essayer cela dans mes forms qui utilisent l'UC dgv:
mais il ne rentre même pas l'event
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void dgv_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { if (e.Column.Name.ToLower().Contains("date")) e.SortResult = DateTime.Compare((DateTime)e.CellValue1, (DateTime)e.CellValue2); e.Handled = true; }
est-ce dû à l'user control ? je le pense, faudrait-il que je passe le sortCompare dans l'uc et pas dans son instance ?
voici le code de l'UC :
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 public class DGV : DataGridView { // propriétés /// <summary> /// indique si la dgv cache les colonnes qui commencent par PK (dataBase) /// </summary> public bool _CacherPK { get; set; } // couleurs private Color _CouleurLigneImpair = Color.FromArgb(((int)(((byte)(225)))), ((int)(((byte)(225)))), ((int)(((byte)(225))))); private Color _CouleurLigneSelect = Color.FromArgb(((int)(((byte)(155)))), ((int)(((byte)(155)))), ((int)(((byte)(155))))); #region "Création d'une instance" protected override void OnCreateControl() { // CONFIG de L'user control this.AllowDrop = false; this.AllowUserToAddRows = false; this.AllowUserToDeleteRows = false; this.AllowUserToOrderColumns = false; this.AllowUserToResizeColumns = true; // redimensionnement colonne possible this.AllowUserToResizeRows = false; // pas de redimensionnement des lignes possible this.DefaultCellStyle.SelectionBackColor = _CouleurLigneSelect; // style des lignes impaires DataGridViewCellStyle ligneImpaire = new DataGridViewCellStyle(); ligneImpaire.BackColor = _CouleurLigneImpair; ligneImpaire.SelectionBackColor = _CouleurLigneSelect; this.AlternatingRowsDefaultCellStyle = ligneImpaire; // style de colonne DataGridViewCellStyle styleCol = new DataGridViewCellStyle(); styleCol.Alignment = DataGridViewContentAlignment.MiddleCenter; styleCol.ForeColor = Color.Black; styleCol.SelectionBackColor = Color.Blue; styleCol.WrapMode = DataGridViewTriState.True; //autorise le retour à la ligne 24/01/15 this.ColumnHeadersDefaultCellStyle = styleCol; this.BorderStyle = BorderStyle.None; this.ReadOnly = true; // En lecture seul this.RowHeadersVisible = false; // pas de colonne en entête this.AutoGenerateColumns = true; this.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; //Par défaut on selectionnera des lignes this.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.MultiSelect = false; this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); // ajoute un évenement pour la gestion du format des cellules en fonction des valeurs this.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.DGV_CellFormatting); // ajoute un évenement si le dataSource change this.DataSourceChanged += new EventHandler(DGV_DataSourceChanged); // ajoute un évenement si le dataSource est activé et rempli this.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(DGV_DataBindingComplete); } #endregion #region "EVENTS" void DGV_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { GestionAffichageColonne((DGV)sender); } void DGV_DataSourceChanged(object sender, EventArgs e) { GestionAffichageColonne((DGV)sender); } // Change la façon d'afficher les cellules selon la colonne et sa valeur. private void DGV_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) { // bloque l'affichage le temps de tout remplir this.SuspendLayout(); // style écriture par défaut e.CellStyle.Font = new Font("Arial", 10); // couleur de texte pour les colonnes avec action : En bleu if (this.Columns[e.ColumnIndex].Name.Equals("nom") || this.Columns[e.ColumnIndex].Name.Equals("designation")) { e.CellStyle.ForeColor = Color.Blue; } else { e.CellStyle.ForeColor = Color.Black; } this.ResumeLayout(false); this.PerformLayout(); } #endregion /// <summary> /// Masquer les colonne qui en doivent jamais être visibles et traite les clés FK pour l'affichage /// </summary> /// <param name="_dgv">le sender casté de la DGV en cours</param> private void GestionAffichageColonne(DGV _dgv) { int i = 0; foreach (DataGridViewColumn item in _dgv.Columns) { // cacher les colonnes de clé primaire if (_CacherPK && item.Name.StartsWith("pk")) this.Columns[i].Visible = false; i++; } } }
Partager