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:
InformationsquelleAutor Bodger | 2010-11-09