Solved

Datagridview fails on form load evemt

Posted on 2009-07-03
5
307 Views
Last Modified: 2013-11-08
Hi All

I am having a bit of a weird issue trying to create a form that displays only a datagridview. I am using VB,net 2009

I created a sub routine to run when the forms new function is called, I pass this function thre parameters which are then fed into a stored procedure which will in turn populate the dataset and i hope that datagrid eventually.

The problem is that when I try and load the data from the dataset into the data grid i get an error saying that the object refrence is not set to an instance of the object. I am confused as the code for the datagridview is identical (as far as i can see) to another sub routing which works perfectly.

Any ideas on this one?

incidentally I get the same error when i put the dataset code in the form load event and if i put the binding code in the same routine as the dataset load sub

thanks in advance
Form opening code:
    Private Sub EURb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EURb.Click
        Dim d1 As Date = DatePicker.Value.AddMonths(-1).AddDays(-DatePicker.Value.Day)
        Try
            If Not IsNothing(f3) Then
                If Not f3.IsDisposed Then
                    f3.WindowState = FormWindowState.Normal  ' Optional
                    f3.BringToFront()  '  Optional
                Else
                     f3 = New HistoryDisplay("EUR", "CASH", d1)
                     f3.Show()
                End If
            Else
                f3 = New HistoryDisplay("EUR", "CASH", d1)
                f3.Show()
             End If
        Catch ex As Exception
            MsgBox(ex.Message, , "Load Report")
        End Try
    End Sub
 
The new() subroutine:
Sub New(ByVal CCY As String, ByVal Table As String, ByVal Date2 As Date)
        'CCY1 = CCY
        'Table1 = Table
        'Date1 = Date2
        Dim CONNSTR As String = "integrated security=SSPI;data source='CFPD8-CA\SQLEXPRESS';initial catalog=CFltd"
        Dim cn As New SqlConnection(ConnStr)
         datrades = New SqlDataAdapter("CashLadderGetFullDetails", cn)
        datrades.SelectCommand.CommandType = CommandType.StoredProcedure
        datrades.SelectCommand.Parameters.AddWithValue("@Date", Date2.Date)
        datrades.SelectCommand.Parameters.AddWithValue("@CCY", CCY)
        Try
            cn.Open()
            datrades.Fill(dsTrades, "Trades")
        Catch ex As Exception
            MsgBox(ex.Message, , "Loading Data")
        Finally
            cn.Close()
        End Try
    End Sub
 
   Private Sub HistoryDisplay_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         DataGrid1.DataSource = dsTrades
        DataGrid1.DataMember = "Trades"
    End Sub

Open in new window

0
Comment
Question by:ChrisAllison
5 Comments
 
LVL 23

Accepted Solution

by:
Jens Fiederer earned 167 total points
ID: 24812751
I suspect at the time the form's constructor is called, its controls have not been created yet and can't be populated.

You SHOULD be able to bind when the form is loaded.

0
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 166 total points
ID: 24815364
Did you set dsTrades to a new object before you passed it to Fill() (either in the constructor or statically)?
// Statically
Dim dsTrades As New DataSet()  // Initialized
 
Sub New(ByVal CCY As String, ByVal Table As String, ByVal Date2 As Date)
...
 
// Constructor
Dim dsTrades As DataSet()  // declared-only
 
Sub New(ByVal CCY As String, ByVal Table As String, ByVal Date2 As Date)
    dsTrades = new DataSet()

Open in new window

0
 
LVL 83

Assisted Solution

by:CodeCruiser
CodeCruiser earned 167 total points
ID: 24821159
Place your code inside Load or Shown event of the form instead of new. Your code inside new will be executed before ALL other code in the form hence there are no controls created yet and i think at that the stage the form itself is not created yet.
0
 

Author Closing Comment

by:ChrisAllison
ID: 31599520
thanks for the comments chaps, I got around the problem by placing the code in the load event. My issue with that origianlly was passing data to the stored procedure to dictate what data I load.

the method i attempted to try did work in another 2008 project, which has puzzled me, at least my workaround works!
thanks for the help guys
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

786 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