- PR -

VB2008にてDataGridViewで桁数指定してソートさせたい

1
投稿者投稿内容
つかさ
会議室デビュー日: 2009/03/10
投稿数: 3
投稿日時: 2009-03-10 11:53
使用環境:VB2008

DataGridViewにAccessファイルをバインドし表示させているんですが
12桁の数字(00等から始まるためAccessではテキスト型)で表示させている項目を
下5桁で昇順ソートさせたいのですが、
そのようなことは可能なのでしょうか?
もし可能であるなら、どのような方法があるのか教えてください。
よろしくお願いいたします。
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2009-03-10 16:18
sortイベントで型を変えてあげれば出来そうですね。

コード:

Private Sub GridView_SortCompare(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles GridView.SortCompare
GridView.SortedColumn.ValueType = GetType(Integer)
End Sub

Private Sub GridView_Sorted(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView.Sorted
GridView.SortedColumn.ValueType = GetType(String)
End Sub



[ メッセージ編集済み 編集者: レイル 編集日時 2009-03-10 16:29 ]
つかさ
会議室デビュー日: 2009/03/10
投稿数: 3
投稿日時: 2009-03-10 16:41
レイル様
ご返答ありがとうございます。
それだと12桁全部でソートされてしまうと思います。

説明不足で済みませんでした。

12桁の構成ですが
「004200900123」のような形式で
最初の3桁、例の「004」の部分は地域番号となっており
001〜008まであります。
次の4桁、例の「2009」の部分は、登録年です。
残りの5桁、例の「00123」が通し連番でして
この下5桁の連番部分でソートを行いたいのです。

このようなことは可能なのでしょうか?
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2009-03-10 17:19
実は最初にこちらを記載していたのですが、わざわざ編集してました。すみません。

コード:

Private Sub GridView_Sorted(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView.Sorted
If GridView.SortedColumn.Index = 0 Then
Dim tmp As Integer
Dim array As New SortedList
For Each row As DataGridViewRow In GridView.Rows
If IsNullOrEmpty(row.Cells(GridView.SortedColumn.Index).Value) = False Then
Dim str As String = row.Cells(GridView.SortedColumn.Index).Value.ToString.Substring(7)
If Integer.TryParse(str, tmp) = True Then
array.Add(tmp, row)
End If
End If
Next

GridView.Rows.Clear()
For i As Integer = 0 To array.Count - 1
Dim row As DataGridViewRow = array.GetByIndex(i)
GridView.Rows.Add(row)
Next
End If
End Sub



[ メッセージ編集済み 編集者: レイル 編集日時 2009-03-10 17:52 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2009-03-10 17:50
  1. バインドしている DataTable に列を一行(プログラムから)追加する。
    その DataColumn は Expression を用い、SUBSTRING などで目的の列の値を
    ソートに適した形で表現する式列にする。
  2. DataBindingComplete イベントなどで上記の列のカラムを非表示にしておく。
    また目的の列のカラムの SortMode を Programmatic にしておく。
  3. 目的の列でソートしたいときには、DataGridView の Sort メソッドを呼び出し、
    非表示の式列のカラムを使ってソートを行う。
こんなのでどうでしょ。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2009-03-10 17:50 ]
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2009-03-10 17:53
Hongliangさんの方がスマートです。
というかそうやる方が良いですね^^;
つかさ
会議室デビュー日: 2009/03/10
投稿数: 3
投稿日時: 2009-03-10 18:29
Hongliang様
レイル様

お二方ともありがとうございました。
Hongliangさんのやり方をヒントに頑張ってみます。
1

スキルアップ/キャリアアップ(JOB@IT)