cs_Botanique
Messages postés113Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 6 mars 2008
-
21 sept. 2005 à 11:50
cs_LouisXV
Messages postés6Date d'inscriptiondimanche 18 juin 2006StatutMembreDernière intervention15 avril 2008
-
15 avril 2008 à 02:01
Bonjour,
j'ai créé un datagrid avec des DataGridTextBoxColumn et j'aimerais trasnformer l'une d'elles en combobox. J'ai vu les différents messages et sources concernant ce sujet que leplus simple était de mettre au-dessus de la cellule voulue (ou la colonne) la combobox et que celle-ci devient active et visible lorsque la colonne devient active et ensuite on récupère la valeur de la combo dans la cellule.
Ok, jusque là, j'ai tout compris mais il se pose un problème : comment récupérer la position d'une cellule d'un datagrid avec des colonnes personnalisées?
cs_pcvesoul
Messages postés123Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention25 juillet 20071 21 sept. 2005 à 13:36
Voici comment je fais :
Private Sub Grille_Dblclick()
Call Grille_Keypress(13)
End Sub
Private Sub Grille_Keypress(KeyAscii As Integer)
If Grille.Rows>1 and KeyAscii = 13 then
If Grille.Col = 0 Then
MsgBox "Cette information ne peut pas être modifiée...", vbApplicationModal, "Message"
Grille.SetFocus
Exit Sub
Else
Saisie.Top = Grille.CellTop + Grille.Top
Saisie.Left = Grille.CellLeft + Grille.Left
Saisie.Width = Grille.CellWidth
Saisie.Height = Grille.CellHeight
Saisie = Grille.TextArray(Grille_Col(Grille, Grille.Row, Grille.Col))
Saisie.Visible = True
Saisie.SetFocus
End If
End If
cs_Botanique
Messages postés113Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 6 mars 2008 21 sept. 2005 à 19:33
Merci pour ton aide,
j'ai finalement opté pour la création d'une classe DataGridComboBoxColumn, mais là comment l'utiliser. Je sais le faire par le code, mais les autres colonnes du datagrid, je les ai crées avec l'éditeur de colonnes de Visual Studio 2003. Donc, comment faire apparaître cette nouvelle instance dans l'éditeur de colonne en plus des DataGridTextBoxColumn et DatagridBoolColumn?
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 21 sept. 2005 à 21:57
ts1.GridColumnStyles.Add(ComboTextCol)
Ou TS est un un tablestyle
Private Sub WriteMappingNames()
Dim dgt As DataGridTableStyle
For Each dgt In myDataGrid.TableStyles
Dim dgc As DataGridColumnStyle
For Each dgc In dgt.GridColumnStyles
Console.WriteLine(dgc.MappingName)
Next dgc
Next dgt
End Sub
cs_Botanique
Messages postés113Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 6 mars 2008 22 sept. 2005 à 10:47
Oauais, Génial cela s'affiche comme je veux.
Par contre, j'ai un petit soucis lorsque je veux l'utiliser. Quand je clique sur la cellule, une erreure apparaît :
System.InvalidCastException : Cast du type 'DBNull' en type 'String' non valide.
at Microsoft Visual Basic.CompilerService.StringType.FromObject(Object Value)
at Test.DataGridComboBoxColumn.Paint(Graphics g, Rectangle bounds, CurrencyManager source, Int32 rowNum, Brush backBrush, Brush foreBrush, Boolean alignToRight) in F:\Projet Visual Studio\Test\DataGridComboBoxColumn.vb : line 117
Je ne comprend pas trop ce qu'il me dit. Mais je pense que cela à une relation avec la procédure qui suit issue de ma classe DataGridComboBoxColumn :
Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal alignToRight As Boolean)
Try
Dim clef As String
Dim valeur As String
clef = GetColumnValueAtRow(source, rowNum)
If Not clef = "" Then
Dim row As DataRow
If DT.Rows.Contains(clef) Then
row = DT.Rows.Find(clef)
valeur = row.Item(0)
Else
valeur = "Erreur"
End If
Else
valeur = "vide"
End If
Dim rect As Rectangle = bounds
g.FillRectangle(backBrush, rect)
rect.Offset(0, 2)
rect.Height -= 2
g.DrawString(valeur, Me.DataGridTableStyle.DataGrid.Font, foreBrush, RectangleF.FromLTRB(rect.X, rect.Y, rect.Right, rect.Bottom))
Catch ex As Exception
MessageBox.Show(ex.ToString, "Erreur d'Affichage des données")
End Try
cs_Botanique
Messages postés113Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 6 mars 2008 22 sept. 2005 à 12:41
Il s'agit du même message d'erreure. Dans ma classe il y a aussi une procédure d'enregistrement des données :
Protected Overrides Function Commit(ByVal dataSource As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer) As Boolean
If IsEditing = True Then
SetColumnValueAtRow(dataSource, rowNum, Combo.SelectedValue)
Combo.Visible = False
IsEditing = False
End If
Return (True)