.net - 在VB asp.net 2.0中对数据表的行进行分组

标签 .net vb.net datatable

顾名思义,我正在尝试将数据表中的行分组。为了进一步详细说明,该表具有相同的行,但一个字段(列)除外。基本上,我想做的是将相同行的所有不同字段放在同一字段中,同时删除其他行。

这是我目前正在使用的语法

   Dim i As Integer
    Dim j As Integer
    For i = 0 To (ds.Tables(0).Rows.Count() - 1) Step 1
        If (i < ds.Tables(0).Rows.Count()) Then
            roleHtml = "<table><tr><td>" + ds.Tables(0).Rows(i).Item("roleName") + "</td></tr>"
            For j = (ds.Tables(0).Rows.Count() - 1) To 0 Step -1
                If (ds.Tables(0).Rows(i).Item("UserName") = ds.Tables(0).Rows(j).Item("UserName")) And (ds.Tables(0).Rows(i).Item("roleName") IsNot ds.Tables(0).Rows(j).Item("roleName")) Then
                    roleHtml += "<tr><td>" + ds.Tables(0).Rows(j).Item("roleName") + "</td></tr>"
                    ds.Tables(0).Rows.Remove(ds.Tables(0).Rows(j))
                    i -= 1
                End If
            Next j
            roleHtml += "</table>"
            ds.Tables(0).Rows(i).Item("roleName") = roleHtml
        End If
    Next i

问题是,删除行时它们的索引会更改,并且基本上该字段会被抛出与它无关的另一行。

最佳答案

好吧,我可以帮助循环结构。这与您正在执行的操作完全不匹配(它使表完整无缺,只是构建了一个大字符串,并且还假定该表以特定方式进行了排序),但是它将演示使用实际数据进行的经典控制中断处理。为此,需要先按用户然后按角色对表进行排序。

Dim i As Integer = 0
Dim CurUser As String = ""
Dim CurRole As String = ""
Dim result As new StringBuilder()
Dim r as DataRowCollection = ds.Tables(0).Rows

While i < r.Count
    'Next User:'
    CurUser = r(i)("UserName")
    result.AppendFormat("<h2>{0}</h2>", CurUser).AppendLine()
    result.AppendLine("<table>")

    While i < r.Count AndAlso CurUser = r(i)("UserName")
        'Next Role:'
        CurRole = r(i)("roleName")
        result.AppendFormat("<tr><td>{0}</td></tr>", CurRole).AppendLine()

        While i < r.Count AndAlso CurUser = r(i)("UserName") AndAlso CurRole = r(i)("roleName")
            i += 1 'Next Record: same user, role '
        End While
        'Finished this role'
    End While
    'Finished this user:'
     result.AppendLine("</table>").AppendLine()
End While

它具有 3个嵌套循环,而不仅仅是两个。但是,它仍然具有线性性能:它将仅对每个记录进行一次迭代。之所以起作用,是因为所有循环共享相同的计数器,该计数器仅在内部循环中递增,并且它们都具有相同的基本结束条件。

关于.net - 在VB asp.net 2.0中对数据表的行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362979/

相关文章:

c# - .net core 为什么我可以单独按键获取 IFormCollection

javascript 过滤器功能在 IE 11 中不起作用,但在 Chrome 和 Mozilla 中运行良好

.net - 检查字符串是否不等于任何字符串列表

javascript - 如何从 vb.net 后面的代码读取在 jquery 中创建的 cookie?

C# - 更改 DataGridView 中每行单元格值的最有效方法

c# - 如何使 DataTable.Compute 与不同的 CultureInfos 一起工作

javascript - 未捕获的类型错误 : Cannot read property 'className' of undefined for datatable

c# - 将整个调试控制台输出发送到剪贴板?

c# - 将 VB.NET 代码转换为 C#

c# - 杀死正在运行的程序的方法以及如何捕获它们?