C# 为什么Listbox多重选择在页面加载时不起作用?
我有一个包含SQL DB数据的列表框。在页面加载时,我想根据查询结果中的数据选择多个项目。它不会给我任何错误,也不会工作。 这是代码C# 为什么Listbox多重选择在页面加载时不起作用?,c#,asp.net,.net,C#,Asp.net,.net,我有一个包含SQL DB数据的列表框。在页面加载时,我想根据查询结果中的数据选择多个项目。它不会给我任何错误,也不会工作。 这是代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack){ DataTable userinfo = AppDataAccess.retrieveUsers(id); foreach (DataRow ro
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;
}
}
}
}
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack){
DataTable userinfo=AppDataAccess.retrieveUsers(id);
foreach(userinfo.Rows中的DataRow行)
{
字符串组=行[“GroupNumber”]。ToString();
List val=group.Split(',').ToList();
如果(val!=null)
{
ListBox1.SelectionMode=ListSelectionMode.Multiple;
//循环以选择多个项目
foreach(字符串每值)
{
if(ListBox1.Items.FindByValue(per.ToString())!=null)
{
ListBox1.Items.FindByValue(per.ToString()).Selected=true;
}
}
}
}
}
}
它没有给我任何错误,也没有选择任何项目。我尝试了几种方法,但仍然不起作用。有什么想法吗?您可以用另一种方法尝试,循环所有
列表项
,并设置每个选定的属性:
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);
}
}
foreach(userinfo.Rows中的DataRow行)
{
字符串组=行字段(“GroupNumber”);
string[]vals=group.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries);
foreach(ListBox1.Items中的ListItem项)
{
所选项目=VAL.Contains(项目值);
}
}
您可以尝试另一种方法,循环所有列表项
,并设置每个选定的
属性:
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);
}
}
foreach(userinfo.Rows中的DataRow行)
{
字符串组=行字段(“GroupNumber”);
string[]vals=group.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries);
foreach(ListBox1.Items中的ListItem项)
{
所选项目=VAL.Contains(项目值);
}
}
为列表框设置SelectionMode=“Multiple”
。为列表框设置SelectionMode=“Multiple”
。从页面加载中删除此项目选择代码,并将其放入另一种方法(例如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;
}
}
}从页面加载中删除此项目选择代码,并将其放入另一种方法(例如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;
}
}
}如何填写列表框1.Items
集合?@Knaģ它与数据库表中的数据绑定。您是否确保代码在ListBox数据绑定后运行。依我看,似乎doubtfull@jbl那是我也不确定的。如果是问题,有什么替代方法来解决?我刚刚跳入CFML,PHP专区到.Net。如何填充列表框1.Items
集合?@Knaģ它与数据库表中的数据绑定。您是否确保代码在ListBox数据绑定后运行。依我看,似乎doubtfull@jbl那是我也不确定的。如果是问题,有什么替代方法来解决?我刚刚跳转到CFML,PHP专区到.Net,但OP甚至以编程方式设置了它,正如您在他的代码中看到的:ListBox1.SelectionMode=ListSelectionMode.Multiple代码>哦,对不起,我没有看到。但OP甚至已经用编程方式设置了它,正如您在他的代码中看到的:ListBox1.SelectionMode=ListSelectionMode.Multiple哦,对不起,我没有看到。