web-dev-qa-db-ja.com

オブジェクトのList <>をDropDownListにDataBindして、オブジェクトのプロパティに基づいてSelectedItemを設定するにはどうすればよいですか?

オブジェクトのList<>をDropDownListにDataBindし、オブジェクトのプロパティに基づいてSelectedItemを設定するにはどうすればよいですか?

たとえば、List<Person>があるとします

Personに3つのプロパティがある場合...

Person .Name (string)
       .Id  (int)
       .Selected (bool)

Selected == trueの最初のものをリストのSelectedItemにしたい。

12
user135799

これを試して:

_List<Person> list = new List<Person>();
// populate the list somehow

if ( !IsPostBack )
{
    DropDownList ddl = new DropDownList();
    ddl.DataTextField = "Name";
    ddl.DataValueField = "Id";
    ddl.DataSource = list;
    ddl.DataBind();

    ddl.SelectedValue = list.Find( o => o.Selected == true ).Id.ToString();
}
_

選択されたアイテムが常に少なくとも1つあることを保証できない場合は、list.Find()呼び出しからの戻り値をチェックして、それがnull

また、DropDownList ddl = new DropDownList();ウェブフォームがすでに宣言されている場合は不要です:

_<asp:DropDownList ID="ddl" runat="server" />
_
20
Charlie Kilian

私はこれがうまくいくと信じています:

List<Person> people = GetDataFromSomewhere();
DropDownList ddl = new DropDownList();
ddl.DataTextField = "Name";
ddl.DataValueField = "Id";
ddl.DataSource = people;
ddl.DataBind();
ddl.SelectedValue = (from p in people
                     where p.Selected == true
                     select p.Id).FirstOrDefault().ToString();
4
Tim Hobbs

「選択された」部分が必須である場合は、以下を使用してバインドすることもできます。

        List<Person> ps = new List<Person>();
        DropDownList dl = new DropDownList();
        dl.Items
           .AddRange(ps
            .Select(p => new ListItem() {
               Text = p.Name
               , Value = p.ID
               , Selected = p.Selected }).ToArray());
2
faester

私は今同じ質問をしましたが、リストから項目を手動で追加するためのコードの記述は、説明されている他の解決策よりも短いか長くなっていることがわかりました。

したがって、このようなものがあなたのために働くはずです:

        //bind persons
        foreach(Person p in personList)
        {
            ListItem item = new ListItem(p.Name, p.Id.ToString());
            item.Selected = p.Selected;
            DropDownListPerson.Items.Add(item);
        }

IsPostBackと、リストに既に項目があるかどうかを確認してください。

1

リストにバインドした後、私はこのようなことをします。

    private void SetSelected(int id)
    {
        foreach (ListItem li in list.Items)
        {
            li.Selected = false;
            if (li.Value == id.ToString())
            {
                li.Selected = true;
            }
        }
    }
0
goalie7960