Я не могу найти Datatable для одной строки и обновить данные ячейки строки в vb.net - PullRequest
0 голосов
/ 26 апреля 2020

Я пишу в программе Inventory и делаю свою первую попытку использования DataTable. Все, что я хотел сделать, это найти правильную строку и иметь возможность обновлять столбцы, такие как затраты, цена продажи, текущий запас. Я пробовал так много примеров, которые нашел, но просто не могу заставить его работать. У меня есть функция, которая может найти текущий индекс строки, но я не знаю, как перейти к этой строке и обновить данные. Я пробовал выбирать утверждения несколькими разными способами и не увенчался успехом. Я хочу найти элемент, который является идентификатором записи автоинкремента. Это не может быть так сложно, но я провел три дня в кругу. Если бы я мог получить небольшой совет, я был бы признателен. Спасибо

    InvtTable.Columns.Add("Item", Type.GetType("System.Int32"))      ' 1  12
    InvtTable.Columns.Add("ModelStyle", Type.GetType("System.String")) ' 3  2
    InvtTable.Columns.Add("Description", Type.GetType("System.String")) ' 4  3
    InvtTable.Columns.Add("CoverFinsh", Type.GetType("System.String")) ' 5  4
    InvtTable.Columns.Add("Invt.Type", Type.GetType("System.String"))   ' 6  5
    InvtTable.Columns.Add("Tag No.", Type.GetType("System.String"))     ' 7  6
    InvtTable.Columns.Add("Loc", Type.GetType("System.String"))         ' 8  7
    InvtTable.Columns.Add("Curr.Invt.", Type.GetType("System.Int32"))   ' 9  8
    InvtTable.Columns.Add("PO", Type.GetType("System.String"))          ' 10 9
    InvtTable.Columns.Add("PO Date", Type.GetType("System.String"))     ' 11 10
    InvtTable.Columns.Add("CompID", Type.GetType("System.Int32"))     ' 11 10
    InvtTable.Columns.Add("Vendor", Type.GetType("System.String"))     ' 11 10
    InvtTable.Columns.Add("Cost", Type.GetType("System.Int32"))     ' 11 10
    InvtTable.Columns.Add("Retail", Type.GetType("System.Int32"))     ' 11 10
    InvtTable.Columns.Add("Sale", Type.GetType("System.Int32"))     ' 11 10
    InvtTable.Columns.Add("Note", Type.GetType("System.String"))     ' 11 10
    InvtTable.Columns.Add("Width", Type.GetType("System.Int32"))     ' 11 10
    InvtTable.Columns.Add("Length", Type.GetType("System.Int32"))     ' 11 10

Вот некоторые из вещей, которые я пробовал. Пример 1

Dim rows As DataRow() = InvtTable.[Select]("Item = '%0%' ", tbxItemID.Text)
For Each row As DataRow In rows
    MsgBox("here")
Next

ex 2

Dim matches = From row In InvtTable
                      Let Item = row.Field(Of Int32)("Item")
                      Where Item = Decimal.Parse(tbxItemID.Text)

Есть еще много примеров для c#. Я бы sh я бы пошел в этом направлении, но я действительно не хочу начинать снова. Надеюсь, в этом есть смысл помочь мне. Еще раз спасибо

1 Ответ

0 голосов
/ 26 апреля 2020

Альтернативный способ с Linq

Dim id As Integer = Integer.Parse(tbxItemID.Text)
Dim row As DataRow = 
    table.AsEnumerable().First(Function(row) row.Field(Of Integer)("Item") = id

' Update row
row.SetField("Cost", 99)
row.SetField("Sale", 199)

Тем не менее, я бы предложил использовать простой объект, который сделает такие операции эффективно простыми

Public Class InventoryItem
    Public Property Id As Integer
    Public Property ModelStyle As String
    Public Property CurrentSaldo As Integer
    Public Property CostPrice As Integer
    Public Property SalePrice As Integer
    ' and so on
End Class

Чем вы можете заполнить коллекцию предметов из базы данных или файла или где-либо еще

Dim inventory As List(Of Inventory) = LoadFromDatabase()

Dim id As Integer = Integer.Parse(tbxItemID.Text)
Dim item = inventory.First(Function(item) item.Id = id)

With item
    .CostPrice = 99
    .SalePrice = 199
    .CurrentSaldo -= 1
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...