DataGridView的排序不工作 [英] DataGridView Sort does not work

查看:156
本文介绍了DataGridView的排序不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Visual Studio 2010中VB.NET

我有一个DataGridView.DataSource设置自定义对象的一个​​集合。列使用来自显示自定义对象只读属性,该对话框仅用于显示。这些属性都返回字符串对象。我设置列所有,但其中2至sortmode自动(未设置一个按钮或复选框的)。然而,它并不排序。我用Google搜索周围,大多数人使用SQL或绑定的来源,但我使用一个简单的VB集合。有人说我应该实现IComparable,但不是字符串已经IComparable的?

任何帮助将是AP preciated?

感谢名单

Bodger

每一个请求,这里有一些code片段。

此方法从柱我设计的详细定义的列 设计师。

列名被称为pSelected或pCustomer,并对应着一个 由同名属性,列定义联系的。

 
保护小组UpdateDGVUS()
        如果不USColumnsInitted然后
            USColumnsInitted = TRUE

            dgvUS.AutoGenerateColumns =假
            dgvUS.Columns.Clear()

            昏暗IIDX作为整数

            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(P型)。的DisplayIndex = IIDX
            dgvUS.Columns(PTYPE)。SortMode = DataGridViewColumnSortMode.Automatic
            IIDX = IIDX + 1

            dgvUS.Columns.Insert(IIDX,Me.pDesc​​ription)
            dgvUS.Columns(pDesc​​ription)。的DisplayIndex = IIDX
            dgvUS.Columns(pDesc​​ription)。SortMode = DataGridViewColumnSortMode.Automatic
            IIDX = IIDX + 1

            dataUpdatedUS()
        结束如果
    结束小组
 

这是自定义对象,它是集合中的一个片段

 
公共类ItemXact01
    公共属性名字作为字符串
    公共属性名字作为字符串
    公共物业公司作为字符串
    公共属性类型为String
    公共属性描述作为字符串
    公共属性RefNumber作为字符串
    公共属性DownloadID作为字符串
    公共属性选为布尔
    公共财产请求ID作为整数

    ...

    公共只读属性pCompany作为字符串
        得到
            pCompany =公司
        最终获取
    高端物业

    公共只读属性PTYPE作为字符串
        得到
            P型=类型
        最终获取
    高端物业

    公共只读属性pDesc​​ription作为字符串
        得到
            pDesc​​ription =说明
        最终获取
    高端物业

    公共只读属性pSelected由于布尔
        得到
            pSelected =选定
        最终获取
    高端物业

 

...

中的数据被放入地方本code

 
    私人小组dataUpdateDGV(为ByRef DGV至于DataGridView中,为ByRef MyCollection的为集合)
        myMain.Log(dataUpdatedDGV:001:&dgv.RowCount&:&myCollection.Count&:)

'由于某种原因,不等于没有在下一行显示

        如果dgv.RowCount myCollection.Count然后
            myMain.Log(dataUpdatedDGV:002)

            dgv.DataSource =无
            如果myCollection.Count> 0,
                myMain.Log(dataUpdatedDGV:003)

                dgv.DataSource = MyCollection中
            结束如果
        结束如果

        myMain.Log(dataUpdatedDGV:004)

        dgv.Invalidate()
        dgv.Update()
        dgv.Refresh()

        myMain.Log(dataUpdatedDGV:OUT)
    结束小组
 

解决方案

如果我没记错的话,你可以把一个绑定源你收集和在DataGridView和绑定源之间提供了一堆功能。我认为,它可以让你排序为好。这一切只不过是把我的头,我不能现在测试它的顶部。

Visual Studio 2010 VB.NET

I have a DataGridView.DataSource set to a Collection of custom objects. The columns use read only properties from the custom object for display, this dialog is for display only. The properties all return String objects. I set the columns all but 2 of them to sortmode automatic (the ones that are not set is a button or a checkbox). Yet it does not sort. I have googled around and most people use sql or binding sources but I am using a trivial vb collection. Some say I should implement IComparable but isn't String already IComparable?

Any help would be appreciated?

Thanx

Bodger

Per a request here are some code snippets.

This method defines the columns in detail from columns I designed in the designer.

The column names are called pSelected or pCustomer and corresponds with a property by the same name that the column definition ties to.


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

This is a snippet of the custom object that is in the 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

...

The data is put into place with this 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

解决方案

If I remember correctly you can put a binding source between you collection and the datagridview and the binding source will provide a bunch of functionality. I think it allows you to sort as well. This is all just off the top of my head as I can't test it right now.

这篇关于DataGridView的排序不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆