Link to home
Start Free TrialLog in
Avatar of tdhughesCPA
tdhughesCPA

asked on

Why won't the datagridview always show all records in a dataset?

have a datagridview control that works fine if there are less than four lines displayed, but gets strange when there are four or more.

When a user changes the selected date, the dataset is purged and then refilled with data appropriate to that date.  I use Me.Test_for_VBdotNetDataSet_Dynamic.Clear() to clear it and Me.Native_TimeTrackingTableAdapter.Fill(Me.Test_for_VBdotNetDataSet_Dynamic.Native_TimeTracking, Me.Label5.Text, Me.MonthCalendar1.SelectionStart) to refill it.  The parameters are passed to the query that fills the dataset.  After refilling, the dataset has five records.  I can loop through those records and confirm that they are, in fact, what is in the database.  The datagridview is bound to the dataset.  When I check the number of lines in the datagridview though, (Me.DataGridView1.Rows.Count.ToString) I get four rows.  

Aparently, without regard to the number of records in the dataset the maximum number of rows that will display is four.  I have tested with four, five, and six returned records, but I do not have data for more than that.  Is there a parameter that I may have inadvertently set that prevents an initial display of more than a certain number of records?

This problem is preventing effective use of the tool I have developed and needs to be resolved ASAP.  I have looked and tested and pondered, and cannot see where in my code a problem might be.  At this point, I am beginning to believe that this may be a problem with the control itself.  If anyone has any ideas, please help me out.  Thanks in advance.

Trevor

Avatar of Sancler
Sancler

Check out the .RowCount property

Roger
Avatar of tdhughesCPA

ASKER

That returns the same number of rows, and te same behavior is maintained where the datagridview will not exceed four lines - even when there is what should be a five line grid.

Thanks for your input

Trevor
I cannot reproduce the behaviour you're reporting, and I haven't come across it in quite the form you are reporting it.  Which makes me doubt that it is a problem with the DataGridView itself.  It may be something to do with the bindings.  I think you need to do a specific check that the DataGridView is, at the stage at which you are having the problem, actually bound to the datatable that has been updated.

To check this I suggest that, after updating the dataset, you track back through the databinding to the actual datatable that the DataGridView IS bound to rather than just checking the row.count of the datatable that it SHOULD be bound to.  Unfortunately, this can be a convoluted process.  The DataGridView's immediate DataSource can be a BindingSource, or a DataSet, or a DataTable, or a Dataview.  If it is a BindingSource then the DataSource of that can be a DataSet, a DataTable, or a Dataview.  If it is a DataSet then the DisplayMember will be a specific DataTable within that.  If it is a DataView then the DataTable you want is the .Table of that.  

To track back, you have to know, or work out, what the precise sequence is in the case concerned.  It is possible to code for this generically, on the lines of

   If TypeOf MyDataGridView Is BindingSource Then
      Dim bs As BindingSource = CType(MyDataGridView.DataSource, BindingSource)

and so on.  But I have found it easier to code for the specific instance I am trying to debug (the code is only going to be temporary, for debugging purposes, anyway) on the lines

   MsgBox(MyDataGridView.DataSource.ToString)

and then, in the light of what that shows, code a line to deal with that and so on, until the actual DataTable is determined.  

I know that you KNOW what DataTable the DataGridView is bound to, and you've checked that, and it does have the extra rows in it.  So you may well feel that this convoluted extra check is a waste of time.  But if you've checked everything else, then perhaps there's nothing to lose.  And things don't always happen as we expect them to - e.g

https://www.experts-exchange.com/questions/21911005/Maintaining-a-dataset-across-Controls.html

Roger
ASKER CERTIFIED SOLUTION
Avatar of Sancler
Sancler

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial