質問

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'
役に立ちましたか?

解決

これを置き換えます:

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

これ:

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

夕食のようにしました。

他のヒント

DDLをListに直接バインドするだけではない理由

DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList; 
ddl.DataBind(); 

SharePointリストの場合は機能しません-エラー:データソースが無効なタイプです。 IListSource、IEnumerable、またはIDataSourceのいずれかでなければなりません。上記のように、SharePoint開発者がこれがList&lt; string&gt;の代わりにSPListであると考えた場合に備えて、チャイムすることにしました。

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

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

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

修正します。

    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()));
}

しかし、私は実際にマーカスの提案が少し良くなっています。

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

次のように書くことができます:

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

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

ddl.DataSource = nameList;
ddl.DataBind();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top