C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ListBox 辞書順でなく数値でソートしたいです


(過去ログ 97 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■57665 / inTopicNo.1)  ListBox 辞書順でなく数値でソートしたいです
  
□投稿者/ いちろう (8回)-(2011/03/08(Tue) 09:28:28)

分類:[C#] 

ListBoxのSortedプロパティをTrueにすることで、ソートは可能ですが、
辞書順でなく数値順でソートしたいと思っております。
ネットを探してみましたが、簡単な方法が見つかりませんでした。
簡単にはできないものなのでしょうか?
アドバイスよろしくお願い致します。

(辞書順にソートされてしまう)
1
10
11
2
20
21




(数値順にソートしたい)
1
2
10
11
20
21

引用返信 編集キー/
■57666 / inTopicNo.2)  Re[1]: ListBox 辞書順でなく数値でソートしたいです
□投稿者/ επιστημη (2606回)-(2011/03/08(Tue) 09:48:11)
επιστημη さんの Web サイト
↓もちっとマシな手がありそ。とりあえず。


// 文字列でソートしちゃダメ
 listBox1.Sorted = false;
// 元ネタ作る
 listBox1.Items.Add(1);
 listBox1.Items.Add(10);
 listBox1.Items.Add(2);
 listBox1.Items.Add(20);
 listBox1.Items.Add(3);
 listBox1.Items.Add(30);
// ArrayListに取り込んで
 ArrayList al = new ArrayList(listBox1.Items);
// ソートして
 al.Sort();
// 書き戻し
 listBox1.Items.Clear();
 foreach (int n in al) listBox1.Items.Add(n);

引用返信 編集キー/
■57667 / inTopicNo.3)  Re[1]: ListBox 辞書順でなく数値でソートしたいです
□投稿者/ 魔界の仮面弁士 (2123回)-(2011/03/08(Tue) 10:01:06)
No57665 (いちろう さん) に返信
> ListBoxのSortedプロパティをTrueにすることで、ソートは可能ですが、
> 辞書順でなく数値順でソートしたいと思っております。
並び順を重視したいなら、DataTable を経由させてみては如何でしょう。

private DataTable table;

private void Form1_Load(object sender, EventArgs e)
{
    table = new DataTable();
    table.Columns.Add("数値", typeof(decimal));  // 数値型の列として定義
    table.Rows.Add(1);
    table.Rows.Add(10);
    table.Rows.Add(11);
    table.Rows.Add(2);
    table.Rows.Add(20);
    table.Rows.Add(21);

    listBox1.DataSource = table;
    listBox1.DisplayMember = "数値";
    listBox1.ValueMember = "数値";
}

private void button1_Click(object sender, EventArgs e)
{
    // 昇順
    table.DefaultView.Sort = "数値 ASC";
}

private void button2_Click(object sender, EventArgs e)
{
    // 降順
    table.DefaultView.Sort = "数値 DESC";
}

private void button3_Click(object sender, EventArgs e)
{
    // ソートなし
    table.DefaultView.Sort = null;
}

引用返信 編集キー/
■57669 / inTopicNo.4)  Re[2]: ListBox 辞書順でなく数値でソートしたいです
□投稿者/ いちろう (9回)-(2011/03/08(Tue) 10:28:42)
回答ありがとうございました。

ネットで調べてはいたのですが、Comparatorインターフェースを
触るようなことが書いてあり、小難しいなと思ってました。
ちょっとあきらめかけてたところでした。

教えていただいた方法はコード数も少なく、わかりやすいので大変助かりました!!

解決済み
引用返信 編集キー/
■57677 / inTopicNo.5)  Re[3]: ListBox 辞書順でなく数値でソートしたいです
□投稿者/ shu (503回)-(2011/03/08(Tue) 12:41:46)
No57669 (いちろう さん) に返信
> 回答ありがとうございました。
>
> ネットで調べてはいたのですが、Comparatorインターフェースを
> 触るようなことが書いてあり、小難しいなと思ってました。
> ちょっとあきらめかけてたところでした。
IComparerかと思いますが、2項目以上のソートとか特殊なソートをする場合には
必要になることも多々あります。試してみるのもいいのではないでしょうか?
解決済み
引用返信 編集キー/
■57697 / inTopicNo.6)  Re[3]: ListBox 辞書順でなく数値でソートしたいです
□投稿者/ くり太郎 (2回)-(2011/03/09(Wed) 13:54:20)
くり太郎 さんの Web サイト
自分の場合は、リストボックスの項目を並べ替えるという考え方よりも、別途コレクションを持っておいて、必要に応じて並べ替えた結果をリストボックスに再度バインディングさせるといった方法をよく使います。

No57669 (いちろう さん) に返信
> 回答ありがとうございました。
>
> ネットで調べてはいたのですが、Comparatorインターフェースを
> 触るようなことが書いてあり、小難しいなと思ってました。
> ちょっとあきらめかけてたところでした。
>
> 教えていただいた方法はコード数も少なく、わかりやすいので大変助かりました!!
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -