Link to home
Start Free TrialLog in
Avatar of chlade
chlade

asked on

calling a subform passing data

I have a question that should be simple, but has me stumped.  I can probably find an ugly way to do this, but it seems to be something that should be able to be handled in a straightforward way.

I have a form with a listview control.  When the user doubleclicks a row, I want to call a separate form where the user can edit the various fields that make up the record the user clicked on the first form.

I have no problem with the handling of the listview and so on.  My question is simply:  How do I open another form, populating fields with data from the first form?

As a side question (but still related), I have an imagelist on the first form.  I would like to refer to the same images on my second form.  Is it better to recreate the imagelist (I'd think not), refer back to the original form, or pass the image list to the second form?  How would I go about doing this?

Thanks,
Chris
Avatar of natloz
natloz

Here is a sample where I am in form frmAFEMaintenance, and based on a DATAGRID selection I query and populate field in frmAFEDetail before I open it...

'********************************
    'User wants to edit an AFE Detail
    '********************************
    Private Sub btnEditItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditItem.Click
        Dim bFail As Boolean = False
        Dim oDs As New DataSet("dsAFE") 'Dataset object
        Dim cDB As clsDBConn = New clsDBConn 'Connection Class
        Dim strConn As String = cDB.getStrConn 'Get connection string for database
        Dim oConn As New SqlConnection 'SQL connection object
        Dim oComm As SqlCommand 'SQL Command object

        'Connect to SQL server and validate login
        Try
            'Pass connection string to SqlConnection
            oConn.ConnectionString = strConn

            '*************************
            'Load the AFE Detail Table
            '*************************
            'SQL Database statements
            oComm = New SqlCommand
            oComm.CommandType = CommandType.StoredProcedure
            oComm.CommandText = "spGetAFEDetail"
            oComm.Connection = oConn

            'Send in parameters
            oComm.Parameters.Add(New SqlParameter("@pkAFEDetailID", SqlDbType.Int)).Value = 0

            'create and fill the Data Adapter
            Dim oDa As New SqlDataAdapter(oComm) 'SQL Data Adapter object
            oDa.Fill(oDs, "tblAFEDetail")
        Catch
            MsgBox("Error connecting to SQL Server")
        End Try

        If dgAFEDetailGrid.VisibleRowCount < 1 Then
            MsgBox("No AFE Detail is selected in the Grid.")
        Else
            Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
            Dim oSelectedCell As DataGridCell
            Dim oSelectedItem As Object
            Dim intAFEDetailID As String

            oSelectedCell = dgAFEDetailGrid.CurrentCell
            oSelectedItem = dgAFEDetailGrid.Item(oSelectedCell.RowNumber, 0)
            intAFEDetailID = CStr(oSelectedItem)

            'All is well, get dteModifed
            If bFail = False Then
                Dim frmAFEDetail As frmAFEDetail = New frmAFEDetail

                'Associate the dataview to get Date Modified
                dvMaintenance.Table = oDs.Tables("tblAFEDetail")
                Dim drv As DataRowView 'Data Row View object to query DataView object

                dvMaintenance.RowFilter = "[pkAFEDetailID] = " & intAFEDetailID

                For Each drv In dvMaintenance
                    _dteDateModified2 = drv("dteDateModified")
                    frmAFEDetail.txtHiddenID.Text = CStr(drv("pkAFEDetailID")) 'Means it is an UPDATE
                Next

                If btnEditItem.Text = "View Item" Then
                    frmAFEDetail.lblEdit.Text = "Read Only"
                    frmAFEDetail.btnSaveItem.Enabled = False
                    frmAFEDetail.btnNewItem.Enabled = False
                Else
                    frmAFEDetail.lblEdit.Text = "Edit Mode"
                End If


                '**********************SETTING FIELDS ON SECOND FORM*****************
                'Open User form and initialize
                frmAFEDetail.txtHiddenID2.Text = txtHiddenID.Text 'Send the header ID for FK
                frmAFEDetail.btnClearTop.Visible = False
                frmAFEDetail.btnClearMiddle.Visible = False
                frmAFEDetail.btnClearBottom.Visible = False
                frmAFEDetail.ShowDialog()

                'Refresh Main screen data
                oDsGrid.Reset()
                LoadDataGrid()

                _bolRefreshMain = True 'Reset the refresh flag

                Me.Activate()
                Me.Cursor = System.Windows.Forms.Cursors.Default
            End If
        End If
    End Sub
ASKER CERTIFIED SOLUTION
Avatar of DotNetLover_Baan
DotNetLover_Baan

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
Avatar of chlade

ASKER

I haven't forgot about this question but I got pulled off onto a different project and probably won't get back to this for a week or two.
Avatar of chlade

ASKER

Thanks natloz, but that didn't help me a lot.  It may work, but it was a little too much code for me to make sense of.

The second response was exactly what I needed.  Thanks.
You may be able to help me on this one.  Kinda sounds like the same thing.  But I am not too sure.

https://www.experts-exchange.com/questions/21257743/Pass-Datagrid-Value-to-a-form.html