web-dev-qa-db-ja.com

C#-リストをドロップダウンリストにダンプする

List<String> nameList = new List<String>();
DropDownList ddl = new DropDownList();

ここにリストが入力され、ソートされます。

nameList.Sort();

次に、ドロップダウンリストにドロップする必要があります。ドロップダウンリストでは、(foreachを使用して)問題が発生しています。

foreach (string name in nameList){
    ddl.Items.Add(new ListItem(nameList[name].ToString()));
}

ワーカーなし-提案はありますか?それは私にコンパイルエラーを与えています:

Error - The best overloaded method match for 'System.Collections.Generic.List<string>.this[int]' has some invalid arguments 

Error - Argument '1': cannot convert from 'string' to 'int'
15
scrot

これを交換してください:

 ddl.Items.Add(new ListItem(nameList[name].ToString()));

これとともに:

 ddl.Items.Add(new ListItem(name));

夕食のように。

21
Mike Burton

DDLをリストのように直接バインドしないのはなぜですか?

DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
41
Marcus King
ddl.DataSource = nameList; 
ddl.DataBind(); 

SharePointリストの場合は機能しません-エラー:データソースのタイプが無効です。 IListSource、IEnumerable、またはIDataSourceのいずれかである必要があります。上記のように、SharePoint開発者がこれがList <string>ではなくSPListに対するものであると考えた場合に備えて、対処することにしました。

SPListにバインドする方法はありますが、SPListItemCollectionを使用するか、1つ改善してSPDataSourceを使用します。 SharePoint開発者については、 このブログのChris O 'Brienによる を参照してください。

2
Tom

これは、Listが文字列(名前)ではなく、intによってインデックス付けされるためです。

foreach (string name in nameList)
{
    ddl.Items.Add(new ListItem(name));
}

それを修正します。

1
wprl
    foreach (string name in nameList){
        ddl.Items.Add(new ListItem(nameList[name].ToString()));
    }

あなたの問題です。

それはもっと似ているはずです

foreach (string name in nameList){
    ddl.Items.Add(new ListItem(name.ToString()));
}

しかし、私は実際にはマーカスの提案が少し好きです。

0

コレクションnameListListであるため、エラーが発生します。文字列ではなくインデックスを使用してアクセスする必要があります(名前を使用します)。

だからあなたは書くことができます:

foreach (string name in nameList){
    ddl.Items.Add(name);
}

ところでこれを行う最善の方法は次のとおりです。

ddl.DataSource = nameList;
ddl.DataBind();
0
ema