2016-01-23 68 views
0

我已经把一个旧的项目vb.net项目。我正在试图查询一个数据表,并将生成的DataRow导入到一个新创建的DataTable中。将DataRow导入新的DataTable会导致错误。 VB.NET

代码:

Private Sub FilterSelectedByString(ByVal str As String, ByVal mID As Integer) 
     Try 
      dsTargetEmployees = MemberShipManager.GetMessageTargets(_page.Client, mID) 
      dtTargets = dsTargets.Tables("MessageTargets") 
      Dim dt As DataTable = Nothing 
      For Each dr As DataRow In dtTargets.Select(str) 
       dt.ImportRow(dr) 
      Next 
      lstSelected.Items.Clear() 
      lstSelected.DataSource = dt 
      lstSelected.DataTextField = "EmployeeName" 
      lstSelected.DataValueField = "EmployeeID" 
      lstSelected.DataBind() 
     Catch ex As Exception 
      //error code 
     End Try 
    End Sub 

这将导致“对象不设置到对象的实例”错误的for循环。我已经尝试手动在表中创建数据列,但这也会导致相同的错误。

回答

0

解决了我自己的问题。将原始表复制到创建的表中,然后清除它构建的正确结构。

Private Sub FilterSelectedByString(ByVal str As String, ByVal mID As Integer) 
    Try 
     dsTargetEmployees = MemberShipManager.GetMessageTargets(_page.Client, mID) 
     dtTargets = dsTargets.Tables("MessageTargets") 
     Dim dt As DataTable = dtTargets.Copy() 
     dt.Clear() 
     For Each dr As DataRow In dtTargets.Select(str) 
      dt.ImportRow(dr) 
     Next 
     lstSelected.Items.Clear() 
     lstSelected.DataSource = dt 
     lstSelected.DataTextField = "EmployeeName" 
     lstSelected.DataValueField = "EmployeeID" 
     lstSelected.DataBind() 
    Catch ex As Exception 
     //error code 
    End Try 
End Sub