
VB2005で開発、データベースはオラクル10gです。
全角・半角文字混在の項目を昇順で読み込み、DataGridViewの表に取り込みます。その後、ヘッダーカラムの並び替えを行うと順番が変わっていまいます。
具体的には
1.読み込み時は、空白は最尾、並び替え後は先頭にくる。
2.読み込み時、括弧(「[」)の半角と全角は別々に並んでいますが、並び替え後は半角と全角との区別はなく、並び替えられます。
カラムを別に設けて、コード体系を変換して、そのカラムを並び替えすればいいのでしょうか?
コード体系の知識は弱いので、お教えください。
PRIVATE SUB BUTTON_CLICK(省略)
DIM I AS INTEGER
DIM S AS STRING
FOR I = 0 TO DataGridView1.Rows.Count - 1
S = DataGridView1(1,I).VALUE
'-----ここで変換?
DataGridView1(2,I).VALUE = S
NEXT
DataGridView1.Sort(DataGridView1.Column(2), _
System.ComponentModel.ListSortDirection.Ascending)
END SUB
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
VB初心者です。
僭越とは存じますが、ちょっと調べてみたので書いてみます。・読み込み時に全角括弧「」と半角括弧[]が別々ということは、
Oracleでは単純に文字コードでソートしている。
(読み込み時に空白が最後尾ということはDESCを付けているのでしょうか?)
>並び替え後は半角と全角との区別はなく、並び替えられます
・これは文字コードが原因ではなく、VBで「あいまい検索」のようなことが行われているのではないでしょうか?
「あいまい検索」とは、「a」と「A」を同一のものとして見て検索するという意味です。
DataGridView.Sort メソッド (IComparer)
http://msdn2.microsoft.com/ja-jp/library/wstxtkx …
というメソッドがあります。
また、
Comparer クラス
http://msdn2.microsoft.com/ja-jp/library/system. …
というクラスがあります。
Comparer にはカルチャを関連付けるようなので、Comparer に日本-日本語カルチャが
関連付けられているために、「」と[]を同一と見ているのでは?
以下のようなコードを書いてみたのですが、myComp を Comparerクラスとして定義しているのに、
DataGridView.Sort() では IComparerを引数としてとるためうまくいきません。
myComp を IComparer として扱いたいのですが、悲しいかなVB初心者のためわかりません。
また、私は SQL Server を使用しているため、JJ-TOさんとは環境が違います。
何か問題解決の足しになれば幸いです。
==== Code ====
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If Me.DataGridView1.Columns(1).DisplayIndex = 1 Then
Me.DataGridView1.Columns(1).DisplayIndex = 2
Me.DataGridView1.Columns(2).DisplayIndex = 1
Else
Me.DataGridView1.Columns(1).DisplayIndex = 1
Me.DataGridView1.Columns(2).DisplayIndex = 2
End If
'????????????????????
'System.Globalization.CultureInfo()の引数は、
'("ja", False), ("ja", True), ("ja-jp", False), ("ja-jp", True)のどれ?
'????????????????????
Dim myComp As New System.Collections.Comparer(New System.Globalization.CultureInfo("ja", False))
'????????????????????
'myComp (as Comparer)を IComparer として扱うにはどうしたらいい?
'????????????????????
Me.DataGridView1.Sort(myComp)
Me.DataGridView1.Sort(Me.DataGridView1.Columns(1), System.ComponentModel.ListSortDirection.Ascending)
End Sub
==== end of Code ====
irija_bariさん、ありがとうございます。
oracle8.1.6以上では、NULLは最後尾にソートされるのが、標準です。
もしも、NULLを先頭にするならば、sql文に[nulls first]をつけ加える必要があります。客先の要望もNULLは最後尾にという要望だったので、DataGridViewの並び替え時の扱いとは違ってきます。
irija_bariさんも言われるとおり、文字コードでのソートが必要だと思ったで、shift_jisコードに変換してそれをソートいました。NULLだったら、999をセットしました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COBOL・全角判定
-
COBOLでの全角文字の判定をした...
-
VBA 文字に半角が含まれて...
-
住宅にカナを入力する際に丁目...
-
エクセルでの”々”の扱い
-
エクセルにMicrosoft Barcode C...
-
word差し込み印刷 半角カタカ...
-
全角英数字の必要性が理解できない
-
VBAの文字列の中に”(全角のダブ...
-
ダブルコーテーションの置換
-
メモ帳の段落の揃え方
-
全角入力
-
封筒の宛先で縦書きの書き方
-
VBA Shift-JISをJISに変換する...
-
「一角」って何でしょうか
-
VB2005 DataGridViewの全角・半...
-
VB.net、テキストボックス入力...
-
IEからEdgeへの移行に伴うIMEの...
-
LaTeXで半角カンマと全角カンマ...
-
Accessで日付や数値を全角で表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
住宅にカナを入力する際に丁目...
-
VBA 文字に半角が含まれて...
-
IEからEdgeへの移行に伴うIMEの...
-
英数字のみ全角から半角に変換
-
全角英数字の必要性が理解できない
-
メモ帳の段落の揃え方
-
word差し込み印刷 半角カタカ...
-
COBOL・全角判定
-
エクセルにMicrosoft Barcode C...
-
VB.net、テキストボックス入力...
-
全角入力
-
封筒の宛先で縦書きの書き方
-
いまスマホからカードの申込み...
-
エクセルの検索が正しくできな...
-
Accessのテキストボックスの入...
-
VBで、String型のデータが、...
-
char型全角数字から、int型半角...
-
エクセルでの”々”の扱い
-
「一角」って何でしょうか
-
ログインする際のIDやパスワー...
おすすめ情報