0

こんにちは、よろしくお願いします。

そこで、SQL データベースからテーブルを取得し、リースの開始を表す "Date From" (DtFr) 列で並べ替えようとしています。次のように簡単だと思いました:

Dim XmlReader As New XmlNodeReader(xmlDoc)
Dim ds As New DataSet
ds.ReadXml(XmlReader)
myDt = ds.Tables("Cam")
If myDt IsNot Nothing AndAlso myDt.Rows.Count > 0 Then
    Dim dv As New DataView(myDt)
    dv.Sort = "DtFr ASC"
    myDt = dv.ToTable(False, "Id", "Name", "Amount", "Unpaid", "DtFr")
End If

しかし、ご想像のとおり、これは機能していません (新しいユーザーは、画像を投稿できません。これは、日付の順序が間違っているだけです)。

ここに画像の説明を入力

データ取得のある時点で、データ型が Date ではなくなり、文字列か何かになった可能性がありますか? 2012 年 1 月 1 日、2012 年 1 月 2 日、2012 年 1 月 3 日、2012 年 1 月 1 日、2012 年 2 月 1 日、2012 年 3 月 1 日などの単純な日付を使用すると、問題なく並べ替えられますが、上記のように、月が異なる場合、順不同で並べ替えられます。

文化をいじってみましたが、年の前の月にそれらを並べ替えて役に立たなかったのではないかと考えました... 私は途方に暮れています。

どうもありがとう、ジョシュ

編集:あなたは天才です、どうもありがとう。あなたは文字列値について正しかった。sortDtFr というデータ列をデータテーブルに追加し、System.DateTime をデータ型として指定し、新しい列の値を Date としてキャストされた古い列の値と等しくなるように行を反復処理しました。興味のある人のためのコードは次のとおりです。

ds.ReadXml(XmlReader)

myDt = ds.Tables("Cam")
myDt.Columns.Add(New DataColumn("sortDtFr", System.Type.GetType("System.DateTime")))
For Each row As DataRow In myDt.Rows
    row("sortDtFr") = CDate(row("DtFr"))
Next
If myDt IsNot Nothing AndAlso myDt.Rows.Count > 0 Then
    Dim dv As New DataView(myDt)
    dv.Sort = "sortDtFr ASC"
    myDt = dv.ToTable(False, "Id", "Name", "Amount", "Unpaid", "DtFr", "sortDtFr")
End If
4

1 に答える 1

2

レコードがそのようにソートされる理由は、( Cam )のデータ型System.String (デフォルト) であるためです。System.DateTimeに変更してみてください。DataColumnDataTable

于 2012-06-01T01:17:29.973 に答える