RE: 用于在线Microsoft CRM的定制Web应用程序
我在 ASP.NET (C#) Web 窗体中编写了一个清单框控件,该控件通过 LINQ 显示来自 CRM Online Microsoft的许多项。
List<string> selDropdown = chkMyItemsHere.Items.Cast<ListItem>()
.Where(li => li.Selected)
.Select(li => li.Value)
.ToList();
string ListBoxValues = string.Join(", ", selDropdown);
这非常有效,我能够将字符串保存到一个字段中(即"字符串值,字符串值")。
现在,在Page_Load我需要从组合字符串中拆分值,并在复选框列表中勾选相关复选框。
string[] k = i.LINQFIELD.Split(',');
for (int m = 0; m <= k.Length - 1; m++)
{
for (int x = 0; x <= chkMyItemsHere.Items.Count; x++)
{
if (chkMyItemsHere.Items[x].Value == k[m])
{
chkMyItemsHere.Items[x].Selected = true;
}
}
}
知道为什么这不会重新填充我的复选框列表吗?任何帮助将不胜感激。
在有效的代码中,你有这个:
string.Join(", ", selDropdown);
在代码中没有,你有这个:
string[] k = i.LINQFIELD.Split(',');
你看到了吗?
作为解决方案,我建议你声明一个常量变量,如下所示:
private const string SPLIT_VARIABLE = ", ";
现在你有这个:
string.Join(SPLIT_VARIABLE, selDropdown);
和
string[] k = i.LINQFIELD.Split(SPLIT_VARIABLE);
拆分逗号分隔字符串的方式(如 jp2code 建议的那样,以确保每个数组元素中没有多余的空格)之后,您还可以使用 LINQ 根据"k"字符串数组中的内容选择复选框列表中的项:
(from i in chkMyItemsHere.Items.Cast<ListItem>()
where Array.Exists<string>(k, s => { return i.Value == s; })
select i).ToList().ForEach(i => i.Selected = true);
这样,您就不必使用嵌套的 for 循环来选择列表项。