【问题标题】:Loop through the rows of single DataTable VB.Net循环遍历单个 DataTable VB.Net 的行
【发布时间】:2018-05-25 18:15:34
【问题描述】:

我在尝试迭代 Datatable 甚至使用 Linq 类时遇到了麻烦。

我有一张这样的桌子:

(String)      (String)        (String)      (String)  (Integer)
Criteria    | description   |  Option   |   Title   | status
------------------------------------------------------------
Criteria 1    Lorem Ipsum      Option 1     Class #     0 
Criteria 1    Lorem Ipsum      Option 1     Class #     0 

Criteria 2    Lorem Ipsum      Option 1     Class #     0 
Criteria 2    Lorem Ipsum      Option 2     Class #     1 
Criteria 2    Lorem Ipsum      Option 3     Class #     0 

Criteria 3    Lorem Ipsum      Option 1     Class #     0 
Criteria 3    Lorem Ipsum      Option 2     Class #     1 
Criteria 3    Lorem Ipsum      Option 2     Class #     0 
Criteria 3    Lorem Ipsum      Option 3     Class #     0 

这是我的代码隐藏

--VB.NET--
Dim dt As DataTable = StoredProcedure    

For Each row As DataRow In dt.Rows
  Dim sCriteriaOne As DataRow() = dt.Select("Criteria='Criteria 1'")

  Item.Append("<p>" + CStr(sCritOne.Item("Option")) + "</p>")
Next

目前它不会编译并给我“项目”不是 DataRow() 的成员

我想要实现的是能够循环遍历 DataTable 并在满足条件的情况下附加 that 行 Item。我曾尝试使用 Linq,但我对此的理解有限,尽管我确实阅读了许多其他 MSDN 文档和关于类似问题的 SO 帖子。

【问题讨论】:

  • 那是因为sCriteriaOneDataRow 的数组,而Item 不是该对象的成员...如果您不想要数组删除(),否则您将需要迭代数组......如果你不删除它们。也打开选项严格。
  • 您似乎在遍历行,然后在每次迭代中执行选择 - 所以您做了两次相同或类似的事情。

标签: asp.net .net vb.net


【解决方案1】:

您的循环开始得很好,但在细节上却分崩离析。我猜到你想做什么,但也许这足以让你开始。字符串前面的$ 是一个内插字符串,它允许您将变量放在由{ } 包围的字符串中。如果您有旧版本的 vb,则必须使用旧方法 String.Format。要检查数据是如何更新的,请在结束程序后检查即时窗口。这就是Debug.Print 的用途。

 If row("Criteria").ToString = "Criteria 1" Then
                row("Criteria") = row("Criteria").ToString & $" <p>{CStr(row("Option"))}"
                Debug.Print(row("Criteria").ToString)
  End If

【讨论】:

  • 感谢您的编辑,但我认为 DataTable 与 html 没有任何关系。网格是的,但 DataTable 仅存在于内存中。 html.Append 会做什么?
  • 没问题。我能理解这种困惑。我使用 html 作为新的 StringBuilder。
  • @cpt-crunchy 知道了!是的,StringBuilder 在循环中是一个非常好的主意。
  • a StringBuilder 将有帮助(谈论性能),只有当有太多的连接时,例如,可能像 10 或更多......根据格式,正式的代码会做和表现最好
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多