ASP.NET ListBox DataBind以前的选定值

时间:2012-01-26 11:35:31

标签: asp.net data-binding listbox

标准ASP.NET ListBox'DataTextFieldDataValueField用于数据绑定,我正在寻找的是DataSelectedField属性。

E.g。我有一个数据库,其中包含我之前选择的值,我只想重新绑定到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 :(得分:0)

我认为沿着这些方向应该做的事情:

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