Solved

DataGridView Binding Source

Posted on 2014-03-19
9
368 Views
Last Modified: 2014-03-20
When I try to use the sort function of the DataGridView with a BindingSource it does not work and throws and error that indicates that Sort does not work with a BindingSource.  What is the best approach to sorting.  On the Grid there is an added column that data is enter into it.  This data must persist between sorts.

I have considered dumping the data from the grid into a new object collection apply some Linq and then rebind the grid.  Is this the best way to do this or is there an alternative?
0
Comment
Question by:Alyanto
  • 4
  • 4
9 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 39939409
You have to apply the sort to the bindingsource instead, rather than to the GridView itself:
YourBindingSource.Sort = "ColumnToSortOn"

Open in new window

0
 

Author Comment

by:Alyanto
ID: 39939525
If I understand you correctly I will need to change the scope of the bindingsource from procedure to class for this to work?
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 39939540
That would depend on how/when you create and populate it. But if you are in a WinForms environment and loading it at Form load time, then yes that would be the sensible approach.
0
 

Author Comment

by:Alyanto
ID: 39939563
is the binding source then reapplied to the grids datasource?  
Also what happens to data in columns that were not included in the binding source?
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 52

Expert Comment

by:Carl Tawn
ID: 39939609
No, you don't need to reapply the data source. Changing the Sort property will trigger an automatic refresh.

For example:
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim cn As New SqlConnection("Server=(local);Initial Catalog=CarlDemo;Integrated Security=SSPI;")
        Dim adap As New SqlDataAdapter("SELECT * FROM TestTable", cn)

        Dim ds As New DataSet
        adap.Fill(ds)

        source.DataSource = ds.Tables(0)
        DataGridView1.DataSource = source

    End Sub

    Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick

        Dim sort As String = DataGridView1.Columns(e.ColumnIndex).Name
        source.Sort = sort

    End Sub

    Private source As New BindingSource()

Open in new window


How are you defining your additional columns?
0
 

Author Comment

by:Alyanto
ID: 39939740
The bindingsource I have is loaded like the
                    
                  Dim Scans = From s As ScannerFile In ScannerImp.Scanner _
                                       Where s.LongCode = longCode _
                                       Select s

                    Dim DbSource as New BindingSource
                    Dim Zones As New Generic.List(Of ScannerFile.Zone)
                    Zones.AddRange(Scans.First.Zones)  'Zones is a collection of class Zone
                    DbSource.DataSource = Zones
                    dgvScans.DataSource = DbSource

Open in new window


Is using a none database source going to be a problem.  After trying what you have suggested the list does not change order.

NB I have moved the  Dim DbSource as New BindingSource into a form level declaration as private.
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 39939847
Using a non-database source makes things more complicated as you have to get into creating a collection derived from BindingList<> that implements its own comparison and sorting methods.
0
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 500 total points
ID: 39940049
If you use an in memory datatable instead of collections, sorting should work just fine.
0
 

Author Closing Comment

by:Alyanto
ID: 39942945
Spot on answer, thank you very much
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Introduction As chip makers focus on adding processor cores over increasing clock speed, developers need to utilize the features of modern CPUs.  One of the ways we can do this is by implementing parallel algorithms in our software.   One recent…
What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now