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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) 【マクロ】フォルダを2つのモニターの定位置に並べたい 2 2022/09/02 01:14
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 空白を全て削除したい 2 2023/05/13 21:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
VBAの文字列の中に”(全角のダブ...
-
Accessで日付や数値を全角で表...
-
エクセルの検索が正しくできな...
-
Accessのテキストボックスの入...
-
小説の点々は……と繋がらなくて...
-
VBA 文字に半角が含まれて...
-
「 _ _ 」の正式名称を...
-
住宅にカナを入力する際に丁目...
-
プログラミングでは、半角括弧...
-
Accessでのグループ化で全角・...
-
[Excel VBA] ODBCによる外部デ...
-
コマンドプロンプト 全角を含ん...
-
IEからEdgeへの移行に伴うIMEの...
-
Excel VBAでオートシェイプ内の...
-
エクセルでの”々”の扱い
-
Excelの中に全角ひらがな、漢字...
-
VBScriptの正規表現で半角スペ...
-
全角文字だけ抜き出したい
-
エクセルにMicrosoft Barcode C...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
全角英数字の必要性が理解できない
-
Excel関数またはVBAでの質問に...
-
エクセルにMicrosoft Barcode C...
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 文字に半角が含まれて...
-
COBOL・全角判定
-
プログラミングでは、半角括弧...
-
word差し込み印刷 半角カタカ...
-
メモ帳の段落の揃え方
-
よくアカウント等に使われる 半...
-
Accessのテキストボックスの入...
-
ダブルコーテーションの置換
-
エクセルでの”々”の扱い
-
小説の点々は……と繋がらなくて...
-
大文字と全角文字は同じ意味で...
-
[VBScript]バイト長の判定
-
封筒の宛先で縦書きの書き方
-
VBで、String型のデータが、...
おすすめ情報