Visual Studio 2010 VB.NETDataGridView Сортировка не работает
У меня есть DataGridView.DataSource для коллекции пользовательских объектов. В столбцах используются свойства только для чтения из настраиваемого объекта для отображения, это диалоговое окно предназначено только для отображения. Свойства возвращают объекты String. Я установил столбцы, кроме 2 из них, для sortmode automatic (те, которые не установлены, являются кнопкой или флажком). Но он не сортирует. Я googled вокруг, и большинство людей используют sql или источники привязки, но я использую тривиальную коллекцию vb. Некоторые говорят, что я должен реализовать IComparable, но не String уже IComparable?
Любая помощь будет оценена по достоинству?
Thanx
Bodger
Per запрос здесь некоторые фрагменты кода.
Этот метод подробно определяет столбцы из столбцов, которые я сконструировал в дизайнере .
Имена столбцов называются pSelected или pCustomer и соответствуют свойству с тем же именем, с которым связано определение столбца.
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
Это фрагмент пользовательского объекта, который находится в коллекции
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
...
Данные введены в действие с этим кодом
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
Можете ли вы разместить код, используемый для определения 'DataGridView'. – ChrisF
Я использую конструктор для диалога. Он имеет контроллер табуляции с некоторыми вкладками, содержащими datagridviews. Здесь я могу поместить некоторые фрагменты, которые я предполагаю: – Bodger