2016-01-23 65 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