从`DataBindingSource`在`DataGridView`中添加数据到新添加的行

时间:2016-08-19 23:48:41

标签: vb.net datagridview

Form4我有DataGridView名为DbTableDataGridView。 在Form3中,有一组字段(文本框)都绑定到DbTableBindingSource。当我运行应用程序时,Form4显示出来。有一个按钮可以打开新表单(Form3),然后在其中输入有关要作为新行添加到数据库(DataGridView)的客户的详细信息。我的代码是"添加" Form4中的按钮如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


        Me.DbTableDataGridView.Refresh()
        Me.DbTableBindingSource.AddNew()

        Form3.ShowDialog()

        Form3.ImiéTextBox.Text = ""
        Form3.NazwiskoTextBox.Text = ""
        Form3.Numer_TelefonuTextBox.Text = ""
        Form3.Numer_RejestracyjnyTextBox.Text = ""
        Form3.MarkaTextBox.Text = ""
        Form3.ModelTextBox.Text = ""
        Form3.Poj_SilnikaTextBox.Text = ""
        Form3.RocznikTextBox.Text = ""
        Form3.PaliwoTextBox.Text = ""
        Form3.Data_PrzyjeciaDateTimePicker.Value = DateTime.Now
        Form3.RichTextBox1.Text = ""

    End Sub

它会添加新行,选择它并清除文本框中的条目(绑定到' DbTableBindingSource'。 在我填写所有字段后,我按下按钮保存:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Try



            Me.Validate()

            Form4.DbTableBindingSource.EndEdit()
            Me.DbTableTableAdapter.Update(CartronicDBDataSet.dbTable)
            TableAdapterManager.UpdateAll(CartronicDBDataSet)
            DbTableTableAdapter.Fill(Form4.CartronicDBDataSet.dbTable)

            MsgBox("Saved")


        Catch ex As Exception
            MessageBox.Show("Blad zapisu. Sprobuj ponownie. W razie potrzeby zamknij, a nastepnie uruchom ponownie program Cartronic")
        End Try


    End Sub

它转到消息"已保存"但实际上最近没有补充新的。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我在Form3和您的数据之间没有链接。

我建议将新创建的数据行传递给Form3的新实例。

  1. 获取对新添加的行的引用
  2. 创建一个新的Form3(避免默认的实例表单,它们是丑陋和邪恶的)。这意味着您不需要清除文本框,因为每次都有一个全新的表单。
  3. 将数据流传递到表单中,您可以将其直接绑定到文本框

    Dim newRow = CType(Me.DbTableBindingSource.AddNew(), DataRow)
    Using frmEditor As New Form3
        frmEditor.DataSource = newRow
        frmEditor.ShowDialog()
    End Using
    
  4. 在form3中添加属性(或最好是构造函数)

    Private mDataSource As DataRow
    Public Property DataSource As DataRow
        Get
            Return mDataSource
        End Get
        Set(value As DataRow)
            mDataSource = value
            Me.ImiéTextBox.DataBindings.Add("Text", mDataSource, "ImiéFieldName")
            ' ....
        End Set
    End Property
    

    如果您使用此方法,则可以删除所有文本框清除代码。

答案 1 :(得分:0)

我已经完成了你的建议,但更简单一些。 将所有文本框分配给当前行中的每个单元格,如下所示:

Form4.DbTableDataGridView.CurrentRow.Cells(5).Value = Me.NazwiskoTextBox.Text.ToString
        Form4.DbTableDataGridView.CurrentRow.Cells(4).Value = Me.ImiéTextBox.Text.ToString

工作正常。 干杯