ASP.NET ListBox DataBind Предыдущие выбранные значения - PullRequest
3 голосов
/ 26 января 2012

Стандартные ASP.NET ListBox' имеют DataTextField и DataValueField, используемые для привязки данных, то, что я ищу, похоже на DataSelectedField свойство.

Например, у меня естьбаза данных, которая содержит ранее выбранные значения, которые я просто хочу повторно привязать к ListBox.

Каков наилучший способ добиться этого?

Просто чтобы дать всем больше подсказокчто я ищу, посмотрите на следующий код:

У меня есть список:

<asp:ListBox runat="server" ID="lbxStuff" SelectionMode="Multiple">
</asp:ListBox>

Установка его значений:

public static List<Triplet> GetDummyData()
{
    return new List<Triplet>
    {
        new Triplet("A", 1, true),
        new Triplet("B", 2, false),
        new Triplet("C", 3, true)
    };
}

protected void BindList()
{
    List<Triplet> items = GetDummyData();
    foreach (Triplet item in items)
    {
        lbxStuff.Items.Add(new ListItem(item.First.ToString(), item.Second.ToString())
        {
            Selected = (bool)item.Third
        });
    }
}

protected void Page_Load(object sender, EventArgs e)
{        
    if (!IsPostBack)
    {
        BindList();
    }
}

Но он чувствуетИзлишне ли это делать так, наверняка должен быть лучший / более быстрый и стандартный способ достижения этого?Как через ObjectDataSource?Иначе я должен добавить свое собственное свойство DataSelectedField через WebControlAdapter?(снова перебор)

1 Ответ

0 голосов
/ 26 января 2012

Я думаю, что-то в этом роде должно помочь:

public static List<Triplet> GetDummyData()
{
    return new List<Triplet>
    {
        new Triplet("A", 1, false),
        new Triplet("B", 2, true),
        new Triplet("C", 3, false)
    };
}

protected void BindList()
{
    var dummyData = GetDummyData();

    var selected = (from item in dummyData
                   where item.Third = true
                   select item).First();

    lbxStuff.DataSource = dummyData;
    lbxStuff.DataTextField = "First";
    lbxStuff.DataValueField = "Second";
    lbxStuff.DataBind();

    if (selected != null) lbxStuff.SelectedValue = selected.Second
}

protected void Page_Load(object sender, EventArgs e)
{        
    if (!IsPostBack)
    {
        BindList();
    }
}
...