DataGridView de Tri ne fonctionne pas
Visual Studio 2010 VB.NET
J'ai un DataGridView.Source de données définie à une Collection d'objets personnalisés. Les colonnes de lire uniquement les propriétés de l'objet personnalisé pour afficher cette boîte de dialogue est uniquement pour l'affichage. Les propriétés de tous le retour des objets String. J'ai mis les colonnes de tous, mais 2 d'entre eux à sortmode automatique (ceux qui ne sont pas définies d'un bouton ou une case à cocher). Cependant, elle ne fait pas de tri. J'ai googlé autour et la plupart des gens utilisent sql ou les sources de liaison, mais je suis à l'aide d'un trivial vb collection. Certains disent que je devrait mettre en œuvre IComparable mais n'est-ce pas la Chaîne de caractères déjà IComparable?
Toute aide serait appréciée?
Merci
Bodger
Par une demande voici quelques extraits de code.
Cette méthode définit les colonnes dans le détail de colonnes que j'ai conçu dans le
le concepteur.
Les noms de colonne sont appelés pSelected ou pCustomer et correspond à un
propriété du même nom que la définition de la colonne des liens.
Protected Sub UpdateDGVUS()
If Not USColumnsInitted Then
USColumnsInitted = True
dgvUS.AutoGenerateColumns = False
dgvUS.Columns.Clear()
Dim iIdx As Integer
iIdx = 0
dgvUS.Columns.Insert(iIdx, Me.pSelected)
dgvUS.Columns("pSelected").DisplayIndex = iIdx
dgvUS.Columns("pSelected").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pCustomer)
dgvUS.Columns("pCustomer").DisplayIndex = iIdx
dgvUS.Columns("pCustomer").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pDetails)
dgvUS.Columns("pDetails").DisplayIndex = iIdx
dgvUS.Columns("pDetails").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pSelectCustomerInvoice)
dgvUS.Columns("pSelectCustomerInvoice").DisplayIndex = iIdx
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pDate)
dgvUS.Columns("pDate").DisplayIndex = iIdx
dgvUS.Columns("pDate").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pAmount)
dgvUS.Columns("pAmount").DisplayIndex = iIdx
dgvUS.Columns("pAmount").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
dgvUS.Columns("pAmount").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pName)
dgvUS.Columns("pName").DisplayIndex = iIdx
dgvUS.Columns("pName").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pPayment)
dgvUS.Columns("pPayment").DisplayIndex = iIdx
dgvUS.Columns("pPayment").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pCompany)
dgvUS.Columns("pCompany").DisplayIndex = iIdx
dgvUS.Columns("pCompany").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pType)
dgvUS.Columns("pType").DisplayIndex = iIdx
dgvUS.Columns("pType").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dgvUS.Columns.Insert(iIdx, Me.pDescription)
dgvUS.Columns("pDescription").DisplayIndex = iIdx
dgvUS.Columns("pDescription").SortMode = DataGridViewColumnSortMode.Automatic
iIdx = iIdx + 1
dataUpdatedUS()
End If
End Sub
Ceci est un extrait de l'objet personnalisé qui est dans la collection
Public Class ItemXact01
Public Property FirstName As String
Public Property LastName As String
Public Property Company As String
Public Property Type As String
Public Property Description As String
Public Property RefNumber As String
Public Property DownloadID As String
Public Property Selected As Boolean
Public Property RequestID As Integer
...
Public ReadOnly Property pCompany As String
Get
pCompany = Company
End Get
End Property
Public ReadOnly Property pType As String
Get
pType = Type
End Get
End Property
Public ReadOnly Property pDescription As String
Get
pDescription = Description
End Get
End Property
Public ReadOnly Property pSelected As Boolean
Get
pSelected = Selected
End Get
End Property
...
Les données est mis en place avec ce code
Private Sub dataUpdateDGV(ByRef dgv As DataGridView, ByRef myCollection As Collection)
myMain.Log("dataUpdatedDGV: 001 :" & dgv.RowCount & ":" & myCollection.Count & ":")
' for some reason the not equal to does not show in the next line
If dgv.RowCount myCollection.Count Then
myMain.Log("dataUpdatedDGV: 002")
dgv.DataSource = Nothing
If myCollection.Count > 0 Then
myMain.Log("dataUpdatedDGV: 003")
dgv.DataSource = myCollection
End If
End If
myMain.Log("dataUpdatedDGV: 004")
dgv.Invalidate()
dgv.Update()
dgv.Refresh()
myMain.Log("dataUpdatedDGV: OUT")
End Sub
- Pouvez-vous poster le code que vous utilisez pour définir le
DataGridView
. - J'ai utiliser le concepteur de la boîte de dialogue. Il dispose d'un onglet contrôleur avec certains des onglets contenant datagridviews. Ici, je peux mettre quelques extraits que j'ai supposons que:
Vous devez vous connecter pour publier un commentaire.
Si je me souviens correctement, vous pouvez mettre une source de liaison entre vous la collecte et le datagridview et de la source de liaison fournira un tas de fonctionnalités. Je pense qu'il vous permet de trier ainsi. C'est tout juste à côté du haut de ma tête que je ne peux pas le tester dès maintenant.
Le point clé ici est que le DataGridView n'est pas responsable pour le tri;
les données sous-jacentes-source (c'est à dire .Source de données de la source de données) est.
vous pourriez mettre en place quelque chose comme ceci SortableBindingList (pour Windows.Les formes)
http://www.martinwilley.com/net/code/forms/sortablebindinglist.html
Si c'est uniquement pour lecture seule, et vous n'avez pas besoin de l'utilisateur d'être en mesure de faire dynamique de tri, alors je vous recommande de vous de tri de la collecte dans votre code avant le réglage de la source de données.
Exemple:
Qui pourrait vous obtenir de tri par défaut.
Si vous devez ensuite mettre en œuvre des dynamiques de tri,
Je vous recommande de le réutiliser votre myCollection.Méthode sort (), tels que la création d'un panneau amarré au-dessus de la datagridview avec des boutons de tri de chaque colonne. Lien de l'événement de clic dans les boutons à votre .Méthode sort (), et d'ajouter un paramètre à la méthode, à savoir par la colonne à trier.
C'est un peu de travail, mais je pense que vous aurez plus de chance la mise en œuvre d'un tri personnalisée scénario que d'obtenir vos composants de Microsoft pour se plier à votre volonté.