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

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

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

Re[3]: テーブルのソート


(過去ログ 21 を表示中)

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

■9186 / inTopicNo.1)  テーブルのソート
  
□投稿者/ hikaru (27回)-(2007/10/20(Sat) 17:34:38)

分類:[C#] 

いつもお世話になります。

早速ですが、教えていただきたいことがあります。
テーブル(lay_Table)内の項目(NO)を昇順にソートしたいのですが、
以下のようになります。

<事象>
NO 1、10、11、2、3、4、…
私としては、
NO 1、2、3、4、…10、11
としたいのですが、どのようにしたらいいのでしょうか?
文字としてソートしているようなんですが、数値としてソートしたいです。

コーディングは以下の通りです。
どなたかご教授おねがいします。

DataTable dt = null;
DataView dv = null;

//データの並び替え
dt = lay_Table.Clone();
dv = new DataView(lay_Table);
dv.Sort = "NO";
foreach (DataRowView drv in dv)
{
dt.ImportRow(drv.Row);
}
引用返信 編集キー/
■9187 / inTopicNo.2)  Re[1]: テーブルのソート
□投稿者/ ぽぴ王子 (278回)-(2007/10/20(Sat) 18:47:25)
ぽぴ王子 さんの Web サイト
No9186 (hikaru さん) に返信

> <事象>
> NO 1、10、11、2、3、4、…
> 私としては、
> NO 1、2、3、4、…10、11
> としたいのですが、どのようにしたらいいのでしょうか?
> 文字としてソートしているようなんですが、数値としてソートしたいです。

"NO" が文字項目として定義されているからそうなってしまうんでしょうね。
根本から言えば、そうなってしまうのを数値項目にすればいいような気がします。
どうやってテーブルに入れているのかはわかりませんが、例えばSQLで工夫するとか
そもそものDBの項目が文字項目だったら数値項目に変更するとか。

そういったことを一番に考えるべきではありますが、この条件で数値としてソート
するのであれば、列を追加して数値に変換させるのが一番楽そうです。
こんな感じで。

lay_Table.Columns.Add("NOソート用", typeof(int), "Convert(NO, 'System.Int32')");
dv = new DataView(lay_Table);
dv.Sort = "NOソート用";
foreach (DataRowView drv in dv)
{
    dt.ImportRow(drv.Row);
}

ちなみにImportRowですが、C# 2.0であればDataView.ToTable()メソッドがあるので
それを使うと楽です。

引用返信 編集キー/
■9210 / inTopicNo.3)  Re[2]: テーブルのソート
□投稿者/ hikaru (28回)-(2007/10/22(Mon) 06:26:16)
No9187 (ぽぴ王子 さん) に返信
> ■No9186 (hikaru さん) に返信
>
>><事象>
>>NO 1、10、11、2、3、4、…
>>私としては、
>>NO 1、2、3、4、…10、11
>>としたいのですが、どのようにしたらいいのでしょうか?
>>文字としてソートしているようなんですが、数値としてソートしたいです。
>
> "NO" が文字項目として定義されているからそうなってしまうんでしょうね。
> 根本から言えば、そうなってしまうのを数値項目にすればいいような気がします。
> どうやってテーブルに入れているのかはわかりませんが、例えばSQLで工夫するとか
> そもそものDBの項目が文字項目だったら数値項目に変更するとか。
>
> そういったことを一番に考えるべきではありますが、この条件で数値としてソート
> するのであれば、列を追加して数値に変換させるのが一番楽そうです。
> こんな感じで。
>
> lay_Table.Columns.Add("NOソート用", typeof(int), "Convert(NO, 'System.Int32')");
> dv = new DataView(lay_Table);
> dv.Sort = "NOソート用";
> foreach (DataRowView drv in dv)
> {
> dt.ImportRow(drv.Row);
> }
>
> ちなみにImportRowですが、C# 2.0であればDataView.ToTable()メソッドがあるので
> それを使うと楽です。

ぽぴ王子さん、ありがとうございます。

おっしゃる通り、DBの項目を数値項目にしようとも思いましたが、
いくつかの問題点がありました。

無事、教えていただいた通り、列を追加してソートすることができました。
ありがとうございます。
これからもよろしくお願いします。



引用返信 編集キー/
■9211 / inTopicNo.4)  Re[3]: テーブルのソート
□投稿者/ hikaru (29回)-(2007/10/22(Mon) 06:28:10)
解決にするのを忘れていました。
すいません。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -