- PR -

DropDownListで項目の並び順がおかしくなる

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-08-05 19:16
VC#+ASP.NETでWebアプリケーションを開発しています。
DropDownListにDataSourceにHashtableを指定しています。
Hashtableに順番に設定した値の順番が、表示時にはむちゃ
くちゃになってしまいます。以下ソースのように実装して
いますが、何か設定があるのでしょうか?


Hashtable ht = new Hashtable();
while (sqlReader.Read())
{
// DBより読み込んだ値をHashtableに設定
ht.Add(sqlReader.GetString(1), sqlReader.GetInt32(0));
}
ht.Add("", 0); // 最初に1行、空の値を入れる
DropDownList1.DataTextField = "Key";
DropDownList1.DataValueField = "Value";
DropDownList1.DataSource = ht;
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-08-05 20:58
こんばんは、meiです。

引用:

kojiさんの書き込み (2003-08-05 19:16) より:
Hashtableに順番に設定した値の順番が、表示時にはむちゃ
くちゃになってしまいます。以下ソースのように実装して
いますが、何か設定があるのでしょうか?


Hashtableの実装を見たわけじゃないのですが、
その名の通りハッシュキーを使っているのなら、
入れた順に入ってないのは正しいです。(並んでいたら凄い偶然)
#アルゴリズム本とかでハッシュテーブルなどを調べてみると分かります。

キーと値がセットのデータ構造で、
何らかの並び順が必要な場合はHashtableよりSortedListが向いていると思います。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-08-06 10:17
meiさん、レスありがとうございます。
SortedListを使用する事で、無事入れた順番に値を表示させる事が
出来ました。Hashtableのアルゴリズムを理解していませんでした。
助かりました。非常に感謝してます!
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-08-06 10:52
念のため。
引用:

SortedListを使用する事で、無事入れた順番に値を表示させる事が
出来ました。Hashtableのアルゴリズムを理解していませんでした。


SortedListは入れた順ではありません。
入れた順とキーでのソート順が異なる場合は要注意です。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-08-06 11:25
なちゃさん、ありがとうございます。
SortedListは入れた順ではなく、キーでソートされるのですね。
今回は、キーでソートされたデータを順番に入れてるので、問題
ないようです。SortedListに対する理解が間違ったものになると
ころでした。ありがとうございました。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-08-06 12:00
DBの値を入れるなら SqlDataAdapterとDatasetを使うのも
楽でいいですよ

//DataSetを作る
DataSet data = new DataSet();
//SQLDataAdapterの値をDataSEtに詰める
sqlDataAdapter.fill(data);

DropDownList1.DataTextField = "Key";
DropDownList1.DataValueField = "Value";
DropDownList1.DataSource = data;
DropDownList1.DataBind();
//空白行追加(ここ動かしてないので怪しいです)
DropDownList1.Items,Insert(0,new ListItem"","-1"));

http://ja.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/data/datagrid1.src&file=CS\datagrid1.aspx&font=3
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-08-06 17:16
NYRLさん、ありがとうございます。
これは楽でいいですね。こういうやり方が一般的なんでしょうかね。
1

スキルアップ/キャリアアップ(JOB@IT)