- つかさ
- 会議室デビュー日: 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
- バインドしている DataTable に列を一行(プログラムから)追加する。
その DataColumn は Expression を用い、SUBSTRING などで目的の列の値を
ソートに適した形で表現する式列にする。
- DataBindingComplete イベントなどで上記の列のカラムを非表示にしておく。
また目的の列のカラムの SortMode を Programmatic にしておく。
- 目的の列でソートしたいときには、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さんのやり方をヒントに頑張ってみます。
|