【问题标题】:How to check value from looping every rows with spesific coloumn on datatable?如何通过循环使用数据表上特定列的每一行来检查值?
【发布时间】:2016-05-22 07:54:41
【问题描述】:

我想循环我的数据表的每一行,特定列的值是 1,2,3。但是,该值只检查了数字 1。如何检查循环中的每个值?

   Dim cmd2 As New SqlCommand("Select * from Compartment where OrderFK='1254'", con)
    dr = cmd2.ExecuteReader(CommandBehavior.CloseConnection)

  Dim dt As New DataTable()
    dt.Load(dr) 'Here from datareader
    For Each row As DataRow In dt.Rows
        Dim x As Integer = dt.Rows(0)("CNumber").ToString
        If x = 2 Then
            Loading_No.Value = 2
        Else
           loading_no.value = "Empty"
        End If
    Next

谢谢,

【问题讨论】:

  • 不知道 loading_no 是什么类型的控件,但这个循环不断地用当前循环值 x 替换您在 Value 属性中放置的任何内容。当然,您看到的唯一值是放在那里的最后一个值。
  • 谢谢。从我的代码是 dt.rows(0) 可能值始终为 1。如何为所有计数行选择 dt.rows()?
  • 我怎么知道?你的问题是什么?您在数据表中的值是什么?再次循环直到数据行集结束。但最后只显示最后一个值。
  • 对不起,我一直在编辑我的帖子。具有特定列“Cnumber”的值数据表只有 1、2、3。但是当已经测试时,它只是数据集第一行的循环。第一行是 1。只是简单的问题。从我的代码来看,代码是循环数据表中的每一行吗?我认为,我的代码是“dt.rows(0)”,用于第一行,而不是所有行。
  • loading_no是什么控件?

标签: vb.net datatable dataset


【解决方案1】:

如果您使用 foreach 循环并使用查询检索到的行集,您应该使用 foreach 索引器(行)来读取 CNumber 列的当前值,而不是立即添加到 TextBox 中,将检索到的值添加到一个 StringBuilder 将当前值附加到先前读取的值。在循环结束时将所有内容写入 TextBox 值属性

Dim cmd2 As New SqlCommand("Select * from Compartment where OrderFK='1254'", con)
dr = cmd2.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As New DataTable()
dt.Load(dr) 'Here from datareader

Dim sb = new StringBuilder()
For Each row As DataRow In dt.Rows
    Dim value = row("CNumber").ToString()
    if value = "1" OrElse value = "2" OrElse value = "3" Then
        sb.Append(row("CNumber").ToString & "," )
    End If
Next
If sb.Length = 0 Then 
    sb.Append("Empty")
Else
    ' remove the last comma '
    sb.Length = sb.Length - 1
End If
loading_no.Value = sb.ToString()

还请注意,您可以删除循环中的 if 测试,修改您的查询以仅检索您感兴趣的记录

Dim cmdText = "Select * from Compartment where OrderFK='1254' " & _
              "AND CNumber IN(1,2,3)"

【讨论】:

  • 谢谢你的帮助史蒂夫,你的回答并没有完全解决我的问题,但是你的逻辑编程解决了我的问题。非常感谢史蒂夫的帮助
【解决方案2】:

要找出您的循环经过了多少行,只需将一个计数器放入循环中即可。我正在考虑的是这一行: Dim x As Integer = dt.Rows(0)("CNumber").ToString 您将 x 声明为整数并为其分配一个字符串?

【讨论】:

  • 选项严格关闭在其最佳状态
  • 然后在他的条件语句中隐式转换回一个数字。
  • 是的,我声明为整数,因为值是数字。您能否与我分享一下简单的行代码,以了解循环执行了多少行?
  • 首先我建议将Option strict 设置为On。如果您将变量声明为整数,则必须为其分配一个整数而不是字符串,您可以这样做。计数器将设置为:循环外:dim count as integer=0。循环内:count+=1。循环完成后,您可以将其打印到调试窗口: debug.print(count.tostring)
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多