我有一个包含SQL DB数据的列表框。在页面加载时,我想根据查询结果中的数据选择多个项目。它没有给我任何错误,也没有工作。 这是代码。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack){
DataTable userinfo = AppDataAccess.retrieveUsers(id);
foreach (DataRow row in userinfo.Rows)
{
string group = row["GroupNumber"].ToString();
List<string> val = group.Split(',').ToList();
if (val != null)
{
ListBox1.SelectionMode = ListSelectionMode.Multiple;
//loop to select multiple items
foreach (string per in val)
{
if (ListBox1.Items.FindByValue(per.ToString()) != null)
{
ListBox1.Items.FindByValue(per.ToString()).Selected = true;
}
}
}
}
}
}
它没有给我任何错误,也没有选择任何项目。我尝试了几种方法,仍然无法正常工作。有什么想法吗?
答案 0 :(得分:2)
您可以反过来尝试,循环所有ListItems
并设置每个Selected
属性:
foreach(DataRow row in userinfo.Rows)
{
string group = row.Field<String>("GroupNumber");
string[] vals = group.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach(ListItem item in ListBox1.Items)
{
item.Selected = vals.Contains(item.Value);
}
}
答案 1 :(得分:1)
从您的PageLoad中删除此项目选举代码并将其放入另一种方法(例如SelectItems
)
在您网页的某个位置,您应该有一个或多个ListBox1.DataBind();
来电。
在这些ListBox1.DataBind();
调用之后立即调用SelectItems。
另外我猜你的代码可以用Linq
这样编写public void SelectItems()
{
ListBox1.SelectionMode = ListSelectionMode.Multiple;
var userinfos = AppDataAccess.retrieveUsers(id);
var val = userInfos.Rows.SelectMany(r=>r["GroupNumber"].ToString().Split(','))
.Distinct().ToList()
//loop to select multiple items // could also be converted to Linq. Not sure it would be useful
foreach (string per in val)
{
if (ListBox1.Items.FindByValue(per.ToString()) != null)
{
ListBox1.Items.FindByValue(per.ToString()).Selected = true;
}
}
}
答案 2 :(得分:0)
为ListBox设置SelectionMode="Multiple"
。