Discrepancy in DataGridView column order & databound DataTable

  • Thread starter Thread starter Mike
  • Start date Start date
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
 
Mike,

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

Ken
 
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.
 
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
 
Back
Top