【问题标题】:Find Row Index on DataTable在 DataTable 上查找行索引
【发布时间】:2012-02-06 23:09:32
【问题描述】:

是否可以获取 DataTable 的行索引以便访问上一行和下一行?例如,我有一个包含两列 ChapterTitle 和 PageURL 的 DataTable。这是一本书的目录。 ChapterTitle 是章节名称,PageURL 是包含该章节的 HTML 页面 (chaptername.html)。当进入本书的一章时,我希望能够分辨出哪一章是下一章和上一章。

找到我当前所在的章节后,如何获取下一行和上一行?

ChapterTable.Select("PageURL = '" & PageURL& "'")

【问题讨论】:

  • 你说你有两列:ChapterTitlePageURL,但是你re selecting the column ChapterStartPage`。
  • 要么你的数据库中有信息,要么你必须解析你的章节标题才能找到信息......(提醒:数据库中的行顺序不应该相关。主要键是。)

标签: .net vb.net datatable


【解决方案1】:
Private Sub LoadDataAndFindRow
Dim dt As New DataTable()
dt.Columns.Add("ChapterTitle")
dt.Columns.Add("PageURL")

Dim dr As DataRow = dt.NewRow()
dr(0) = "Aarons Book"
dr(1) = "www.AaronsBook.com"
dt.Rows.Add(dr)

dr = dt.NewRow()
dr(0) = "Tims Book"
dr(1) = "www.TimsBook.com"
dt.Rows.Add(dr)

dr = dt.NewRow()
dr(0) = "vincents Book"
dr(1) = "www.vincentsBook.com"
dt.Rows.Add(dr)

dr = dt.NewRow()
dr(0) = "Xi's Book"
dr(1) = "www.XisBook.com"
dt.Rows.Add(dr)

Dim i As Integer = FindRow(dt, "Tims Book")
Dim prevRowID As Integer = i - 1
Dim nextRowID As Integer = i + 1

End Sub


Function FindRow(ByVal dt As DataTable, ByVal chapterTitle As String) As Integer
For i As Integer = 0 To dt.Rows.Count
If dt.Rows(i)("ChapterTitle") = chapterTitle Then Return i
Next
Return -1
End Function

【讨论】:

  • 有没有办法在不使用循环的情况下做到这一点?
  • 我首先尝试在 datatable.AsEnumerable() 上使用带有 Skip(-1).Take(3) 的 LINQ,但它占用了太多时间才能使其正常工作。另一个想法是在 DataTable 中有第三列称为 RowID,然后您可以使用问题中所示的 .Select 方法,使用 RowID -1 或 +1,您将知道数据表中的 Prev 和 Next 行。
【解决方案2】:

如果您在绘制表格时设置了 dt.Columns.PrimaryKey(),您可以使用 findby(pk) 如果您设置了它,那么您可以轻松使用 LINQ,只需: ' 我们将命名数据表章节以保持可读性:

dim query = from  chapters in dt.AsEnumerable _
             where chapters("chapterTitle").equals(<<your criteria>>) _
             select chapters

newDT = iif(chapters.count > 0, chapters.copyToDataTable(), nothing)

您可以修改或只获取chapters.toDataRow..etc。

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多