【问题标题】:Form inside a panel Datagridview VB.NET面板 Datagridview VB.NET 内的表单
【发布时间】:2015-10-24 19:05:30
【问题描述】:

我有一个在面板内打开的表单。它里面有一个Datagridview。我想要做的是当我选择一行并单击编辑时,我会在编辑表单中获取当前选定行的文本。我以前在使用 Showdialog 时已经完成了这项工作。这次我不希望它以 showdialog 形式显示。

我正在使用的代码使用 Datagrid 关闭表单,并且实际上可以很好地显示第一行。但是当我选择不同的行时,它仍然会在编辑表单中显示第一行。

代码如下:

Try
        If (CIM.Panel2.Controls.Count > 0) Then
            CIM.Panel2.Controls.RemoveAt(0)
        End If
        Dim F1 As New CIMCLIENTEDIT()
        F1.TopLevel = False
        F1.Dock = DockStyle.Fill
        CIM.Panel2.Controls.Add(F1)
        F1.Show()
        F1.txtstdid.Text = dgvData.CurrentRow.Cells(1).Value.ToString
        F1.txtName.Text = dgvData.CurrentRow.Cells(2).Value.ToString
        F1.txtEmail.Text = dgvData.CurrentRow.Cells(3).Value.ToString
        F1.txtNo.Text = dgvData.CurrentRow.Cells(4).Value.ToString
        F1.txtAddress.Text = dgvData.CurrentRow.Cells(5).Value.ToString

    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
    End Try

代码是与 showdialog 一起使用的代码的精确副本。显然,上面的代码在打开编辑表单之前关闭了面板中的第一个表单,但是,它似乎确实可以很好地获取 Datagrid 的第一行。

这行得通:

Try

        CIMCLIENTEDIT.Text = "Edit Details"
        CIMCLIENTEDIT.txtstdid.Text = dgvData.CurrentRow.Cells(0).Value.ToString
        CIMCLIENTEDIT.txtName.Text = dgvData.CurrentRow.Cells(1).Value.ToString
        CIMCLIENTEDIT.txtEmail.Text = dgvData.CurrentRow.Cells(2).Value.ToString
        CIMCLIENTEDIT.txtNo.Text = dgvData.CurrentRow.Cells(3).Value.ToString
        CIMCLIENTEDIT.txtAddress.Text = dgvData.CurrentRow.Cells(4).Value.ToString
        CIMCLIENTEDIT.ShowDialog()
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
    End Try

非常感谢,

马特

【问题讨论】:

    标签: sql-server vb.net datagridview


    【解决方案1】:

    我忽略了一些非常简单的事情。看来我应该在之后关闭面板!有道理。。

    Try
    
        Dim F1 As New CIMCLIENTEDIT()
        F1.TopLevel = False
        F1.Dock = DockStyle.Fill
        CIM.Panel2.Controls.Add(F1)
        F1.Show()
        F1.txtstdid.Text = dgvData.CurrentRow.Cells(1).Value.ToString
        F1.txtName.Text = dgvData.CurrentRow.Cells(2).Value.ToString
        F1.txtEmail.Text = dgvData.CurrentRow.Cells(3).Value.ToString
        F1.txtNo.Text = dgvData.CurrentRow.Cells(4).Value.ToString
        F1.txtAddress.Text = dgvData.CurrentRow.Cells(5).Value.ToString
    
        If (CIM.Panel2.Controls.Count > 0) Then
            CIM.Panel2.Controls.RemoveAt(0)
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
    End Try
    

    【讨论】:

      【解决方案2】:

      关键点是您的dgvData 变量。请检查初始化它的方式和位置,以及设置CurrentRowproperty 的位置。

      【讨论】:

      • 嗨@SQLPolice 感谢您的回复。我正在努力解决这个问题!我已经添加了有效的代码。我试图不使用 ShowDialog。我希望它作为面板内的新表单。如前所述,它适用于第一行。我在这里遗漏了一些明显的东西!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      相关资源
      最近更新 更多