繁体   English   中英

我无法在数据表中搜索一行并更新 vb.net 中的行单元格数据

[英]I can't search a Datatable for one row and update row cell data in vb.net

我正在编写 Inventory 程序并首次尝试使用 DataTable。 我想做的就是找到正确的行并能够更新成本、销售价格、当前库存等列。 我已经尝试了很多我发现的例子,但我似乎无法让它发挥作用。 我有一个 function 可以找到当前行索引,但我不知道如何移动到该行并更新数据。 我已经尝试了几种不同的方式选择语句,但都没有成功。 我想搜索作为自动增量记录 ID 的项目。 这不是那么难,但我花了三天时间转圈。 如果我能得到一点建议,我将不胜感激。 谢谢

    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

前 2

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

c# 还有更多示例。 我希望我会朝那个方向走,但我真的不想重新开始。 我希望这对我有足够的意义。 再次感谢你

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)

也就是说,我建议使用普通的 object,这将使此类操作变得非常简单

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM