2017-01-17 4 views
-1

В VB.NET Я пытаюсь подсчитать значение в списке до тех пор, пока значение «запаса» в моем DataTable, Boxes не будет равно значение в моем списке. Когда это происходит, строка должна быть создана в моем новом DataTable «output». Затем я продолжу подсчет в списке, который ищет другие соответствующие экземпляры, чтобы добавить в «выход».Анализ данных DataTable для сопоставления значения и создания нового DataTable из результатов

До сих пор подсчитывается список, а затем в пределах этого количества, проходящего через данные, подходящие для работы с ценностями. Часть, где меня повесили, - это когда я пытаюсь взять соответствующую строку и поместить ее в другой стол.

Dim output As DataTable 
Dim jsonstringy As String = BoxComms.WebGet("http://foo.foo.foo")  'PULLS JSON STRING 
Dim Boxes = Newtonsoft.Json.JsonConvert.DeserializeObject(Of DataTable)(jsonstring) 
Dim MyString As String = TextBox1.Text    'MAKE STRING OF STOCK #'s FROM TEXTBOX 
MyString = MyString.Replace(" ", "")          'GET RID OF SPACES 
Dim MyArray() As String = MyString.Split(",")    'SEPERATE COMMA DELIMETED LIST 
Dim MyList As List(Of String) = MyArray.ToList() 

For Each value In MyList         'COUNT THROUGH LIST OF STOCK #'s 
    For Each row As DataRow In Boxes.Rows 
     If row("stock") = value Then  'IF STOCK # IS EQUAL TO ANY OF NUMBERS IN TEXTBOX 
      output.ImportRow(row)   'ADD ROW FROM DATATABLE Boxes to DATATABLE output 
     End If 
    Next row 
Next 
+0

DataRow может принадлежать только к одной таблице. Вероятно, существует более быстрый способ поиска строк, которые вы хотите, если сможете объяснить дальше - вы действительно не «разбираете» datarows или datatables. – Plutonix

+0

У меня есть datatable создается из десериализованного json, хранящегося в облаке. в моем приложении есть функция поиска. мое приложение имеет основной DataGridView, который успешно используется для отображения различных типов данных, которые обрабатывает моя программа. Я пытаюсь сделать datatable для отображения результатов поиска в моем DataGridView. Я нашел различные способы копирования datarow из одного стола в другой. Я продолжаю получать system.NullReferenceException. Я думаю, что мне сначала нужно скопировать мои столбцы. – Cfoote7

+0

Если бы вы могли [редактировать] свой пост с некоторыми из этого * и * примерами JSON, я уверен, что есть более быстрый и простой способ. Проблема в том, что мы не знаем, как выглядит какая-либо из этих данных – Plutonix

ответ

0

Решение было довольно простым, мой DataTable сначала нуждался в схеме. чтобы скопировать схему, в которой я нуждался, было инициализировать новую таблицу как клон. для этого код был следующим.

Dim output As DataTable = Boxes.Clone() 

клон против копии. Скопировать get's в схему и клон данных просто получает схему. затем, когда я разбирался в первой таблице, ища совпадения, мне пришлось добавить строку в мою новую таблицу со следующим кодом.

output.Rows.Add(row.ItemArray) 

полный код выглядит следующим образом

 Dim jsonstring As String = BoxComms.WebGet("https://foo.foo.foo") 
     Dim Boxes = Newtonsoft.Json.JsonConvert.DeserializeObject(Of DataTable)(jsonstring) 
     Dim output As DataTable = Boxes.Clone() 
     Dim MyString As String = TextBox1.Text 
     MyString = MyString.Replace(" ", "") 
     Dim MyArray() As String = MyString.Split(",") 
     Dim MyList As List(Of String) = MyArray.ToList() 
     For Each value In MyList 
      For Each row As DataRow In Boxes.Rows 
       If row("stock") = value Then 
        Console.WriteLine(row("stock")) 
        output.Rows.Add(row.ItemArray) 
       End If 
      Next row 
     Next 
     BoxControl.DataGridView1.DataSource = output 
     Me.Close() 
    End If