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をリストのように直接バインドしないのはなぜですか?
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList;
ddl.DataBind();
SharePointリストの場合は機能しません-エラー:データソースのタイプが無効です。 IListSource、IEnumerable、またはIDataSourceのいずれかである必要があります。上記のように、SharePoint開発者がこれがList <string>ではなくSPListに対するものであると考えた場合に備えて、対処することにしました。
SPListにバインドする方法はありますが、SPListItemCollectionを使用するか、1つ改善して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();