• ベストアンサー

ListViewのソートについて

SQL文では "ORDER BY [項目1] ASC, [項目2] ASC" というように並び替えの優先順位に沿ってソートする事が出来ますが、 ListViewで同じようにソートすることは可能でしょうか? 1つの項目のみを対象にしたソートなら出来るのですが… バージョンはVB.NETになります。 ご教授よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

もっと効率のよいやり方があるのかもしれませんが... =============================== Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load 'データ作成 Dim DT As DataTable = New DataTable DT.Columns.Add("Field1", GetType(String)) DT.Columns.Add("Field2", GetType(String)) DT.Columns.Add("Field3", GetType(String)) For i As Integer = 1 To 10 Dim row As DataRow = DT.NewRow() row("Field1") = i row("Field2") = Rnd().ToString row("Field3") = Rnd().ToString DT.Rows.Add(row) Next 'リストビュー生成 With Me.ListView1 .Items.Clear() .View = View.Details .GridLines = True .CheckBoxes = False .FullRowSelect = True .Columns.Clear() With .Columns .Add("Field1", 100, HorizontalAlignment.Left) .Add("Field2", 100, HorizontalAlignment.Left) .Add("Field3", 100, HorizontalAlignment.Left) End With For Each row As DataRow In DT.Rows Dim lst As ListViewItem = New ListViewItem(New String() {CType(row(0), String), CType(row(1), String), CType(row(2), String)}) Me.ListView1.Items.Add(lst) Next End With End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim DT As DataTable = New DataTable DT.Columns.Add("Field1", GetType(String)) DT.Columns.Add("Field2", GetType(String)) DT.Columns.Add("Field3", GetType(String)) For Each lst As ListViewItem In Me.ListView1.Items Dim row As DataRow = DT.NewRow() row(0) = lst.SubItems(0).Text row(1) = lst.SubItems(1).Text row(2) = lst.SubItems(2).Text DT.Rows.Add(row) Next 'ソート Dim SortedRows() As DataRow = DT.Select("", "Field3 ASC, Field1 ASC") 'リストビュー再描画 Me.ListView1.Items.Clear() For Each newrows As DataRow In SortedRows Dim lst As ListViewItem = New ListViewItem(New String() {CType(newrows(0), String), CType(newrows(1), String), CType(newrows(2), String)}) Me.ListView1.Items.Add(lst) Next End Sub

wakatori
質問者

お礼

丁寧にコードまで書いていただき、ありがとうございます。 お陰様で問題を解決できました。 それにしても、本当にSQL文のようなソートをしてくれるメソッドがあるんですね。少し驚きました。

関連するQ&A

  • Order by句でバインド変数を使うには?

    SQL文のOrder by句で2つのバインド変数を用いて、ソートする項目・ソート順を決めたいと思い、以下のようなSQLを作成いたしました。 Select row_Number() Over(Order by Case :ITEM When 'PJコード' then PJコード When '部署コード' then 部署コード end Case :LINE When '1' then DESC When '2' then ASC end .... バインド変数を直接Order by句に入れますと、結果は帰ってくるのですが、バインド変数の値がすべて無視されてデータが出力されます。 以上の理由より、Case文にてバインド変数の値を参照し、ソートする項目と順番を決めております。 上記のソースで実行しますとORA-00907:右かっこがありませんというエラーが表示されます。 2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、実行される状態になります。 Oracleのバージョンは11gです。 ご回答よろしくお願いいたします。

  • SQL-SELECT文でのソート

    VB2010とmdb(Ms-Access)にてシステムを構築しています。 Select文にて取得したレコードをDatagridviewにて表示しようとしているのですが SQL="SELECT * FROM table ORDER BY ID" 当のシンプルなものだと表示できるのですが 特定の文字列順にソートしたくCASE WHENを使用して SQL = "SELECT * FROM table ORDER BY CASE BUPPIN WHEN '○○' THEN 1 WHEN '△△' THEN 2 ELSE 0 END" のようにSQLを書いてみたのですがデータアタプタにてデータテーブルに結果を入力させる際にエラーが出てしまいます。 構文間違いでしょうか? ご教授お願いします

  • SELECT文のソートについて

    SQLのSELECT文で抽出した列Aの値が、例えば1~12であるとして、それを4~12、1~3という具合にソートしたいのですがやり方がわかりません。 ORDER BY句を使えばいいのか、それとも全く別の方法を使うのか教えてください。 よろしくお願いします。

  • PL/SQLにて、マスタから取得した値をORDER BY句に指定したい

    どなたかお判りになる方、ご教示ください。 ★やりたいこと PL/SQLにて、マスタから取得した値をORDER BY句に指定したい。 (例)以下のようなマスタがあるとします。 -------------------------- ソートマスタ SORT_MST ソート順 SORT_ORDER ソート項目 SORT_ITEM ソート種別 SORT_SBT -------------------------- この「ソートマスタ」の「ソート項目」には、以下のトランザクションテーブルの物理カラム名が格納されています。 -------------------------- トラン TRN 商品種別 ITM_SBT 商品コードITEM_COD 商品名 ITEM_NM 金額  ITM_AMN -------------------------- PL/SQLにて「ソートマスタ」から値取得後、「ITEM_COD ASC,ITM_AMN ASC」という文字列を作成し、「トラン」検索時にORDER BY句に指定したのですが、ORDER BY句が全く効いてくれません。 お忙しいところ恐れ入りますが、ご存知の方、よろしくお願い致します。

  • SELECT文のソート条件

    PL/SQLのカーソル定義にて困っています。 SELECT文のORDER BYでソートをかけますが、 例として、引数を2つ与えとします。 2つの値が同値であった場合、次にソートの条件となるのは何なのでしょうか? GROUP BY,WHERE句等はありません。 初歩的な質問過ぎて逆に中々見つけられませんでした。 どなたかご存知の方、教えて頂けますでしょうか。 よろしくお願いします。

  • DISTINCTで選択した項目以外でのソート

    お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。

  • 別テーブルのカラムを利用してソートしたい

    別テーブルのカラムを利用してソートしたい MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」のcountというカラムを利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 「tbl2」のidというカラムは外部キーで「tbl1」のidと関係しています。 テーブル「tbl1」 +------+---------+ |   id |  userid  | +------+---------+ |  1  | tanaka  | |  2  | sato   | +------+---------+ テーブル「tbl2」 +------+---------+ |   id |  count  | +------+---------+ |  1  |   10  | |  2  |   3   | +------+---------+ 次のような文かなと思ったのですが、エラーが返ってきます・・・ SELECT * FROM tbl1 ORDER BY (SELECT id FROM tbl2 ORDER BY count)

    • ベストアンサー
    • MySQL
  • GROUP BY使用時のソートについて

    OracleSqlにて「GROUP BY」使用した日付のデータを取得するSql文を作成したのですが、 「ORDER by」句に「DESC」を付けても降順ソートが行えません。 作成したSql文は以下の通りなのですがなぜ降順ソートが行えないのでしょうか? 「GROUP BY」を使用するとソート出来ないと言うことなのでしょうか? それとも日付型なのでソートが出来ないと言うことなのでしょうか? どなたかご存知の方おりましたらご教授下さい。 ------------------------------------------------- SELECT TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY FROM STOCKTBL WHERE TO_CHAR(RECORDDATE,'YYYY/MM/DD')<='2002/03/07' AND TO_CHAR(RECORDDATE,'YYYY/MM/DD')>='2002/02/22' GROUP BY TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY ORDER by TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY DESC -------------------------------------------------

  • クライアントの自由にソートする

    お世話になっております。 現在データベースの中に下記のようなデータが存在するとします。 A B C D 1 2 3 4 (Aのカラムに1) (Bのカラムに2) と言う具合にデータが入っています。 そこで質問なのですが、クライアントの自由にABCDのカラム内のデータをソートさせるにはどのようにしたらよいでしょうか? 現在は、データベースのテーブルを下記のようにする対処方法しか思いつかないのですが、できれば上記テーブル構成のままソートさせたいのですが何か良い方法は御座いませんでしょうか? 例)  クライアントがA D B C の順にソートしたい場合 テーブル名:TB1 A  1  順位1 B  2  順位3 C  3  順位4 D  4  順位2 select * FROM TB1 A ORDER BY 順位 ASC 出力: 1 4 2 3

  • フリガナのソートがうまくいきません。

    こんにちは。よろしくお願いします。 現在、元のソースプログラムが紛失してしまったため、VB5で作りかえる作業をしています。氏名のアイウエオ順で一覧表を作成するプログラムを作成しているのですが、ソート結果が思ったとおりになりません。 (例)ACCESSのデータというテーブルのフリガナと氏名の2つの列としてください。    オ-ゾノ 大園 ・・・ 長音記号はマイナス記号(-)です。    オオクラ 大蔵         佐藤 ・・・ この分はフリガナなし ACCESSの中に入っているデータが例のようにあるのですが、VB5でSQL文を使ってソートし表示しようとすると、         佐藤    オオクラ 大蔵    オ-ゾノ 大園 となってしまいます。 元のプログラムでは、はじめの(例)のとおりの順番に表示されています。 記載したSQL文は、    SELECT フリガナ,氏名 FROM データ ORDER BY フリガナ としました。 元のプログラムの言語はCOBOL、データベースはORACLE(バージョンは不明)です。これをORACLEの使用をやめ、ACCESSにデータを持つように変更することになりACCESSにデータを移行しました。 元のプログラムどおりの順番に並び替えるのはどうすればよいのでしょうか。

専門家に質問してみよう