How to get a DataGrid that uses a Stored Procedure to initially populate to refresh

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • FrustratedNoob
    New Member
    • Jan 2010
    • 5

    How to get a DataGrid that uses a Stored Procedure to initially populate to refresh

    I've got a database that I've been working on for over a year and a half but I've just recently finished the back end to the point of feeling comfortable with starting on a front end.

    So while I've been able to pick up a great deal just stumbling through on my own with the several apress books I've gotten a hold of I've figured out a great deal and have some half decent forms for data entry but for the life of me I can't figure out how to get the databinding to do whatever it does again after having entered data into the database.

    My problem placed more concisely

    My form's data grid populates from a stored procedure via a binding source.

    My form's button then uses another stored procedure to enter in the data into the database.

    What I want to do is have the datagrid recall the stored procedure and refresh the grid with the newly modified data included.

    This is what I've been racking my brain over for some time, and scouring the internet and my various apress books for, is figuiring out why none of my attempts at doing this are working.

    I'm just finding most all of the stuff out there about datagrids and the such are not at all tailored towards a person trying to do all their interactions via stored procedures. I know I can do the basics, and the forms work and I know that if I just close the form and access it manually again that the datagrid reloads with the newly input data, but I'm really trying to get it so that I'm making a UI that is as easy to use as I can get it.



    Code:
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
     
     
    Public Class WholeAppleInsertion
     
        ' This form is for entering Apple Names with their corresponding
        ' Type. I'm presently trying to get it to work where after submitting
        ' the new name that the data grid will reset itself via calling upon the 
        ' stored procedure originally used to populate the grid so that it can 
        ' repopulate it, giving an updated view to the user
     
     
     
        Private Sub WholeAppleInsertion_Load( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) _
            Handles MyBase.Load
            'TODO: This line of code loads data into the 'VaedaAlefDataSet1.spSelectallWholeApple' _
            ' table. You can move, or remove it, as needed.
            Me.spSelectallWholeAppleTableAdapter1.Fill(Me.VaedaAlefDataSet1.spSelectallWholeApple)
     
            Me.spSelectAppleTypeTableAdapter.Fill(Me.VaedaAlefDataSet.spSelectAppleTypeTableAdapterType)
     
            Me.spSelectallWholeAppleTableAdapter.Fill( _
            Me.VaedaAlefDataSet.spSelectallWholeApple)
     
        End Sub
     
     
     
        ' This is the data grid that holds the list of Apple names with their types 
        ' that are found in the database. THIS is the data grid that I want to get to
        ' update, to refresh, or however you'd say it, whenever the button is pushed.
     
        Private Sub DataGridView1_CellContentClick( _
            ByVal sender As System.Object, _
            ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
            Handles DataGridView1.CellContentClick
     
        End Sub
     
     
     
    '########THIS IS THE BUTTON CLICK EVENT I WANT TO 
    '########TRIGGER THE REFRESHING OF THE DATAGRID
     
        Public Function EnterApple_Click( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) As SqlDataReader _
            Handles EnterApple.Click
     
     
            Using sqlconn As New SqlConnection
                Dim retval As Integer
     
                sqlconn.ConnectionString = "Data Source=SQUASHERZ-PC\SQLEXPRESS;Initial Catalog=VaedaAlef;Integrated Security=True"
                sqlconn.Open()
     
                Dim sqlComm As New SqlCommand
                sqlComm.Connection = sqlconn
                sqlComm.CommandType = CommandType.StoredProcedure
                sqlComm.CommandText = "spInserlectWholeApple"
     
                Try
                    sqlComm.Parameters.Add("@Name", SqlDbType.VarChar)
                    sqlComm.Parameters.Add("@Type", SqlDbType.SmallInt)
                    sqlComm.Parameters("@Name").Direction = ParameterDirection.Input
                    sqlComm.Parameters("@Name").Value = TxtAppleName.Text
                    sqlComm.Parameters("@Type").Direction = ParameterDirection.Input
                    sqlComm.Parameters("@Type").Value = ParameterDirection.Input = ComboBox1.SelectedValue
     
                    retval = sqlComm.ExecuteNonQuery()
                Catch Sqlex As SqlException
                    MessageBox.Show(Sqlex.Message)
                End Try
     
     
                TxtAppleName.Text = ""
     
     
                If retval >= 1 Then
                    MsgBox("something happened")
     
     
                End If
     
     
    ' //Here below are my attempts at getting this to refresh
    ' //It likely makes it clear that I don't know what I'm doing
    ' PLEASE HELP!
     
                Me.WholeAppleInsertion_ResetBindings()
     
                Me.spSelectallWholeAppleBindingSource1.ResetItem(0)
     
                Me.DataGridView1.Refresh()
     
                sqlconn.Close()
     
            End Using
     
     
        End Function
     
     
     
        Private Sub TextBox1_TextChanged( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) _
            Handles TxtAppleName.TextChanged
     
        End Sub
     
        Private Sub ComboBox1_SelectedIndexChanged( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs)
     
     
        End Sub
     
        Private Sub ComboBox1_SelectedIndexChanged_1( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) _
            Handles ComboBox1.SelectedIndexChanged
     
        End Sub
     
     
        Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, _
                ByVal e As System.ComponentModel.DoWorkEventArgs) _
                Handles BackgroundWorker1.DoWork
     
        End Sub
     
        Private Sub spSelectallWholeAppleBindingSource1_CurrentChanged _
            (ByVal sender As System.Object, _
             ByVal e As System.EventArgs) _
             Handles spSelectallWholeAppleBindingSource1.CurrentChanged
     
        End Sub
        'This sub is the binding source that retrieves the data for the data grid
        'This is what I'm trying to figure out how to get it to refresh so that the data
        'grid displays the new information whenever a new name is submitted via the 'submit
        'new button' button.
        Private Sub spSelectallWholeAppleBindingSource_CurrentChanged _
            (ByVal sender As System.Object, _
             ByVal e As System.EventArgs) _
             Handles spSelectallWholeAppleBindingSource.CurrentChanged
     
     
        End Sub
     
     
    End Class
  • semomaniz
    Recognized Expert New Member
    • Oct 2007
    • 210

    #2
    define a data set then assign the retrieved data to the data set then bind the data to the datagrid.

    Me.DataGridView 1.DataSource = Place the dataset here
    Me.DataGridView 1.DataBind()

    Comment

    • FrustratedNoob
      New Member
      • Jan 2010
      • 5

      #3
      semomaniz,

      Well part of what you gave me is doing something and the other part I'm not figuring it out. Heck I may be doing it all wrong. I'm so new I'm not even sure. By placing the first one, the

      Me.DataGridView 1.DataSource = Place the dataset here

      That makes it so that when I press the button something happens to the DataGridView, it goes empty. Which makes me unsure if I'm following you on this or if I'm doing it right. If there's any way, and I know this is asking more of your time and showing my noobness, but could you please give an example in code as to what you're describing would look like?

      Oh, and another problem, and perchance this would vanish if I was doing things correctly, but when I go to do the

      Me.DataGridView 1.DataBind()

      Visual Studio only wants to do a

      Me.DataGridView 1.DataBindings( )

      which it then underlines with the blue line thingy and claims (and I'll be honest and say I'm not quite understanding what it's asking for) that "Property access must assign to the property or use its value" and that one just has me even more befuddled.

      I'm tickled pink that I was able to get the datagridtable to at least do something. I hope you, or someone, can help me with this.

      Thank you again for your time.

      Comment

      • Frinavale
        Recognized Expert Expert
        • Oct 2006
        • 9749

        #4
        I didn't think that you could bind a DataGridView to a DataSet...

        A DataSet contains multiple tables but a DataGridView really should only display one table.

        You should set the DataGridView.Da taSource a specific table in the DataSet...not to the DataSet itself.

        If you require data to be pulled from multiple tables then you should use the tables within the DataSet to return a View or a new table with the columns you need to display.

        Once you have changed the DataSource the DataGridView should display the new source. If not, call the DataBind method...if this still doesn't display the refreshed data also call the DataGridView.Up date() method to repaint the DataGridView.

        -Frinny

        Comment

        Working...