1

RE:Microsoft CRM Online 的自定义 Web 应用程序

我在 ASP.NET (C#) Web 窗体中编写了一个复选框控件,该控件通过 LINQ 显示来自 Microsoft CRM Online 的许多项目。

List<string> selDropdown = chkMyItemsHere.Items.Cast<ListItem>()
                .Where(li => li.Selected)
                .Select(li => li.Value)
                .ToList();

string ListBoxValues = string.Join(", ", selDropdown);

这非常有效,我可以将字符串保存到一个字段中(即“字符串值,字符串值”)。

现在,在 Page_Load 上,我需要从组合字符串中拆分值并勾选 checkListbox 中的相关复选框。

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;
       }
     }
}

任何想法为什么这不会重新填充我的复选框列表?任何帮助将不胜感激。

4

2 回答 2

0

在您的有效代码中,您有以下内容:

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);
于 2015-07-08T13:41:08.057 回答
0

在修复了拆分逗号分隔字符串的方式之后——如 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 循环来选择列表项。

于 2015-07-08T14:46:05.033 回答