【发布时间】:2012-02-19 12:20:15
【问题描述】:
标准 ASP.NET ListBox's 有一个 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?否则我必须通过WebControlAdapter 添加我自己的DataSelectedField 属性? (再次矫枉过正)
【问题讨论】:
-
如果您的数据库中已经有它们,那么将它们绑定到列表框有什么问题?
-
好吧,再次编辑它们,例如ListBox 包含 A、B、C 只选择了 B,所以在编辑时我想重新绑定,显示 B 被选中并允许用户进行其他新选择。我知道如何以编程方式做到这一点,我只想知道实现这一目标的最佳方法是什么?
-
如果我理解正确,我认为可以使用 ViewState,您可以将所选行的 id 保留在 ViewState 中,绑定后您可以使用该值设置列表框的所选行。
-
只是给您一个真实的场景:管理员从角色列表框中为用户选择角色。
-
这感觉就像是标准的、明显的和一般的东西,感觉很奇怪,它们不会成为标准实现。
标签: asp.net data-binding listbox