0
Excel 시트에서 데이터를 읽고 Datatable에 행을 추가하는 VB.NET 함수가 있습니다.Datatable의 Addin Datarow
Private Function LoadDataToRows(ByVal TableName As DataTable, ByVal Header As System.Collections.Specialized.StringCollection) As Boolean
Dim HeaderDataExcel As String = String.Empty 'Data Header
For r As Integer = 1 To RangeDataArray.Rows.Count
Dim NewRow As DataRow = TableName.NewRow
For c As Integer = 1 To RangeDataArray.Columns.Count
If Not (IsNothing(DirectCast(ActiveSheetToManipulate.Cells.Item(r + DataStartRow, c), Excel.Range).Value)) Then
Dim ValueToLoad As String = TryCast(ActiveSheetToManipulate.Cells.Item(r + DataStartRow, c), Excel.Range).Value.ToString
HeaderDataExcel = TryCast(ActiveSheetToManipulate.Cells.Item(DataStartRow, c), Excel.Range).Value.ToString
Dim indice As Integer = Header.IndexOf(HeaderDataExcel)
TableName.NewRow(indice) = ValueToLoad
Else
'Todo
End If
Next
TableName.Rows.Add(NewRow)
Next
Return True
End Function
그러나 데이터가 테이블에 추가되지 않았습니다. 어떤 제안?
나는 인덱스와 함께 sintax를 사용한다. VB 코드를 읽는다면, 나는 indice라는 컬럼의 인덱스를 정의한다. 또한 디버그를 통해 var "ValueToLoad"가 올바른지 확인할 수 있습니다. 그러나 datarow에 데이터가 추가되지 않았습니다. 빈 행만 볼 수 있습니다. – Jotric
이름과 색인이 모두 작동합니다. * ** ** TableName **. NewRow (indice) = ValueToLoad' 및 대신'NewRow (indice) = ValueToLoad'를 수행해서는 안되는 것이 더 중요합니다. 그런 다음 코드를 단계별로 실행하면 행이 로컬에 추가되어 작동을 멈추는 ByVal/ByRef 변경이 발생합니다. – kaj
개체의 새 인스턴스를 만들지 않으면 ByRef를 전달할 필요가 없습니다. 객체로서의 메소드 (예 :'TableName = new DataTable')는 ReferenceTypes입니다. – Nicholas