datarow变量赋值给数据集的表newrow

时间:2014-01-01 13:46:45

标签: vb.net visual-studio-2012 dataset datarow

我正在尝试定义一个数据行以保存值,然后将其添加到数据集中 indgv:datagridview,其中包含值 dsdetails:包含名为details

的表的数据集
If indgv.Rows.Count > 0 Then
            Dim dr As DataRow
            dr = dsdetails.Tables("details").NewRow
            For Each row As DataGridViewRow In indgv.Rows
                dr("mat") = row.Cells("icode").Value
                dr("dateoftrans") = Me.DateTimePicker1.Value
                dr("numoftrans") = transnum.Text
                dr("type") = 1
                dr("doc") = doctyp.SelectedValue
                dr("amount") = row.Cells("iamo").Value
                dsdetails.Tables("details").Rows.Add(dr)
            Next
            adpdetails.Update(dsdetails, "details")
        End If

运行此操作会导致以下错误

  

对象引用未设置为对象的实例。

如何使用'New'重新声明声明以避免问题 BTW:使用new时如下

Dim dr As New DataRow = dsdetails.Tables("details").NewRow

显示设计时错误

  

未定义类型'dsdetails.Tables'。

2 个答案:

答案 0 :(得分:0)

试试这段代码:

If indgv.Rows.Count > 0 Then

    Dim tbl As DataTable = dsdetails.Tables("details")
    Dim dr As DataRow

    For Each row As DataGridViewRow In indgv.Rows

        dr = tbl.NewRow 'Create a new row inside the loop!
        dr("mat") = row.Cells("icode").Value
        dr("dateoftrans") = Me.DateTimePicker1.Value
        dr("numoftrans") = transnum.Text
        dr("type") = 1
        dr("doc") = doctyp.SelectedValue
        dr("amount") = row.Cells("iamo").Value

        tbl.Rows.Add(dr)

    Next

    adpdetails.Update(tbl)

End If

答案 1 :(得分:0)

如果只需要将行从一个表复制到另一个表,DataTable类就有一个您可能想要使用的Copy方法。它的工作原理如下:

Dim dtCopy As New DataTable()
dtCopy = dt.Copy()

如果你有一个绑定到表的datagridview控件,你也可以使用这个表单:

Dim dtCopy As New DataTable()
dtCopy = DirectCast(dataGridViewX1.DataSource, DataTable).Copy()

Copy方法将复制数据表结构和数据。 如果您只想在没有数据的情况下复制结构,可以使用Clone方法。