标准ASP.NET ListBox'
有DataTextField
和DataValueField
用于数据绑定,我正在寻找的是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
属性? (再次矫枉过正)
答案 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();
}
}