Discrepancy in DataGridView column order & databound DataTable

M

Mike

Dear group,

I'm currrently investigating a bug within a piece of our software whereby if
a DataGridView (bound directly to a DataTable) is ordered by column headers
(containing lookup combo boxes where the value is the foreign key of another
table), although the DataGridView is ok, the DataTable becomes out of sync.

In other words, I have a Grid of customers, and if a customer name column
header is clicked - the data moves in the DataGridView, but previous data is
still held for the original row positions in the DataTable.

This throws off row calculations quite considerably, and is a particularly
fustrating bug to debug.

Any ideas are most welcome, and thanks in advance for any advice.

Regards,

Mike
 
K

Ken Tucker [MVP]

Mike,

The datagridview is actually bound to the datatable's defaultview.
That will have the records in the right order.

Ken
 
B

Brian Tkatch

Ken said:
Mike,

The datagridview is actually bound to the datatable's defaultview.
That will have the records in the right order.

Ken

Wow, thanx, that clears something up for me too.

BTW, a way to simply test this would be to add a DataGridView, three
textboxes and a button. Then the following code:

Dim table As New DataTable

Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load

Dim row As DataRow

table.Columns.Add()

row = table.NewRow
table.Rows.Add(row)
row(0) = "A"

row = table.NewRow
table.Rows.Add(row)
row(0) = "B"

DataGridView1.DataSource = table

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
TextBox1.Text = DataGridView1.Item(0, 0).Value.ToString
TextBox2.Text = table.Rows(0)(0).ToString
TextBox3.Text = table.DefaultView.Item(0)(0).ToString
End Sub

B.
 
M

Mike

Ahhh, thank you. I think that will solve it.
Wow, thanx, that clears something up for me too.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
TextBox1.Text = DataGridView1.Item(0, 0).Value.ToString
TextBox2.Text = table.Rows(0)(0).ToString
TextBox3.Text = table.DefaultView.Item(0)(0).ToString
End Sub

^ Great example too. I'll have to do some recoding tonight. If any MSDN
article authors are reading this; this has got to be somewhere that a LOT of
people trip up on, but very little example documentation alludes to using
the .DefaultView.

Thanks!

Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top