2012-02-06 17 views
1

前と次の行にアクセスできるようにDataTableの行インデックスを取得できますか?たとえば、私は2つの列のChapterTitleとPageURLを含むDataTableを持っています。これは本の目次のためのものです。 ChapterTitleは章名であり、PageURLは章(chaptername.html)を含むHTMLページです。本のある章に入るとき、私は次の章と前の章を知りたいと思っています。DataTableで行インデックスを検索

私が現在使っている章を見つけたら、次の行と前の行を得ることができますか?あなたがdt.Columns.PrimaryKeyを設定する場合は、表を策定するときにだけ、あなたは簡単にLINQを使用できるように設定した場合

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

あなたは二つのカラム持って言う: 'ChapterTitle'と' PageURL'を、しかし、列 'ChapterStartPage'を選択you're。 –

+0

あなたのデータベースに情報があるか、情報を見つけるためにチャプタータイトルを解析する必要がありますか(注意:データベースの行の順序は関係ありません。 – GameAlchemist

+0

列名を修正しました – Aaron

答えて

3
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 
+0

ループを使用せずにこれを行う方法はありますか? – Aaron

+0

私は最初、Skip(-1).Take(3)でdatatable.AsEnumerable()でLINQを使用しようとしましたが、動作させるには時間がかかりすぎました。別の考えは、RowIDと呼ばれるDataTableの3番目の列を持つことですし、あなたの質問に示されているように.Selectメソッドを使用することができます-1または+1あなたは、データテーブルの前と次の行を知るだろう。 –

+0

あなたの提案をありがとう。 – Aaron

0

は()、あなただけ(PK)findby使用することができます。 を「データテーブルの名前を読み取り可能にする名前を付けます:

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

関連する問題