2014-01-27 7 views
0

Я анализирую каждую строку текстового файла с фиксированной длиной. Я извлекаю 13 значений из этого текстового файла и вставляю их в переменные нескольких типов данных. В конце концов мне нужно будет добавить эти значения в строку в datatable, но проблема в том, что я не знаю, как это сделать. Я пробовал перебирать столбцы и пытался вставить правую переменную в правый столбец. How do I add each of the variables below to the corresponding column in a datatable all in the same row?Вставка переменных в соответствующий столбец datatable vb.net

Вот мои переменные:

Dim vendorName As String 'a 
Dim vendorNum As Integer 'b 
Dim CheckNum As String 'c - with checkNum and batch no combined 
Dim depositDate As String 'd 
Const crAccount As Integer = 102006 'e 
Dim totCount As Integer ' f 
Const blank As String = "" 'g 
Const num As Integer = 1 'h 
Dim qtr As Integer 'i 
Dim custName As String 'j 
Dim acctNum As Integer 'k 
Dim headerAmount(headerCounter) As Double ' '// Not in the list 
Dim detailAmount As Double 'l 

Dim state As String 'm 
Dim batchNo As String 'n -set this to string to retrieve the 00 or 01 or however many batches there is. 
Dim checkNo As String 'o 

Вот мои колонки:

dt.Columns.Add("Vendor #") 
    dt.Columns.Add("Vendor Name") 
    dt.Columns.Add("Check #") 
    dt.Columns.Add("Date") 
    dt.Columns.Add("102006") 
    dt.Columns.Add("#") 
    dt.Columns.Add("Blank") 
    dt.Columns.Add("1") 
    dt.Columns.Add("12QTR") 
    dt.Columns.Add("Client Name") 
    dt.Columns.Add("Acct No") 
    dt.Columns.Add("Amt") 
    dt.Columns.Add("State") 
    dt.Columns.Add("Batch No") 
    dt.Columns.Add("Check Number") 

Здесь вы петлю я попробовал, но при добавлении каждой переменной в своей собственной строке:

For Each col As DataColumn In dt.Columns 
       If col.ColumnName = "Vendor #" Then 
        dt.Rows.Add(vendorNum) 
       ElseIf col.ColumnName = "Vendor Name" Then 
        dt.Rows.Add(vendorName) 
       ElseIf col.ColumnName = "Check #" Then 
        dt.Rows.Add(checkNo) 
       ElseIf col.ColumnName = "Date" Then 
        dt.Rows.Add(depositDate) 
       ElseIf col.ColumnName = "102006" Then 
        dt.Rows.Add(crAccount) 
       ElseIf col.ColumnName = "#" Then 
        dt.Rows.Add(totCount) 
       ElseIf col.ColumnName = "Blank" Then 
        dt.Rows.Add(blank) 
       ElseIf col.ColumnName = "1" Then 
        dt.Rows.Add(num) 
       ElseIf col.ColumnName = "12QTR" Then 
        dt.Rows.Add(qtr) 
       ElseIf col.ColumnName = "Client Name" Then 
        dt.Rows.Add(custName) 
       ElseIf col.ColumnName = "Acct No" Then 
        dt.Rows.Add(acctNum) 
       ElseIf col.ColumnName = "Amt" Then 
        dt.Rows.Add(detailAmount) 
       ElseIf col.ColumnName = "State" Then 
        dt.Rows.Add(state) 
       ElseIf col.ColumnName = "Batch No" Then 
        dt.Rows.Add(batchNo) 
       ElseIf col.ColumnName = "Check Number" Then 
        dt.Rows.Add(CheckNum) 
       End If 
       'dt.Rows.Add(vendorNum & vendorName & checkNo & depositDate & 
       'crAccount & totCount & blank & num & qtr & custName & acctNum 
       '& detailAmount & state & batchNo & CheckNum) 
       '// I also tried concatenating each of the parameters together 
       ' and when I do this it is only trying to insert in the Vendor # column. 
      Next 

Это не похоже на wo uld быть слишком сложным, но я не могу найти примеров этого. Любая помощь будет оценена по достоинству. Спасибо

ответ

0

Это позволяет мне вставить это значение в этот конкретный столбец. Просто нужен datarow ...

Итак, если вы создаете свой datatable в vb.net со статическим списком имен столбцов, вы можете создать datarow в качестве нового [insert datatable name here] .row, связать колонке, которую вы также хотите добавить, и установите ее равной требуемой переменной.

Ниже приведен код для примера на мой вопрос:

Dim dr As DataRow = dt.NewRow() 
dr("Vendor #") = vendorNum 
dr("Vendor Name") = vendorName 
dr("Check #") = CheckNum 
dr("Date") = depositDate 
dr("102006") = crAccount 
dr("#") = totCount 
dr("Blank") = blank 
dr("1") = num 
dr("12QTR") = qtr 
dr("Client Name") = custName 
dr("Acct No") = acctNum 
dr("Amt") = detailAmount 
dr("State") = state 
dr("Batch No") = batchNo 
dr("Check Number") = checkNo 
dt.Rows.Add(dr) 
1

Поскольку вы хотите, чтобы все они были в одной строке, вам нужно вызвать метод .Add() только один раз. .Add() -method принимает массив в качестве входного сигнала. Элементы в массиве должны быть в том же порядке, что и соответствующие столбцы заголовков столбцов.

PS: Раньше я никогда не слышал о DataTable. Я в основном использую DataSet или BindingList(of T) и привязываю их к DataGridView (если требуется GUI).

Вы можете создать класс с собственностью vendorName, vendorNum, ... и добавить экземпляры этого класса в BindingList. Тогда установка свойства dataSource PropertyGridView - это все, что нужно сделать.

+0

Так было бы похоже на линии, я закомментированного в нижней части моего кода, 'dt.Rows.Add (vendorNum & vendorName & checkNo & depositDate & crAccount & totCount & blank & num & qtr & custName & acctNum & detailAmount & state & batchNo & CheckNum), но вместо этого мне просто нужно добавить эти элементы в массив сначала? –

+0

Да. Но вы вынуждены использовать массив Object, так как у вас есть переменные разных типов. Я предлагаю использовать Typed DataSets вместо этого и привязать его к DataGridView (если нужен графический интерфейс) – Markus

+0

Если я создам типизированный набор данных, как бы вставить в него мои 15 переменных? Единственный способ, которым я работал с наборами данных, - создать xsd и добавить данные к набору данных. –

Смежные вопросы