在字符串列表中添加和删除项目,仅在项目尚未存在时添加

时间:2014-04-07 22:04:16

标签: c# list

我试图从复选框列表中获取所选项目,然后在按钮点击时将它们添加到列表框中。我能够通过以下方式实现这一目标:

protected void AddSelectedField(object sender, EventArgs e)
{
    foreach (ListItem column in ColumnsList.Items)
    {
        if (column.Selected)
        {
            SelectedColumns.Add(column.Text);
        }
    }

    foreach (String column in SelectedColumns)
    {
        SelectedFieldsList.Items.Add(column);
    }
}

然而,问题在于,用户仍然可以在回发发生后添加他们已经选择的相同项目。我尝试过以下操作,但这甚至不会将所选项目添加到列表框中:

protected void AddSelectedField(object sender, EventArgs e)
{
    foreach (ListItem column in ColumnsList.Items)
    {
        if (column.Selected)
        {
            foreach (String item in SelectedColumns)
            {
                if (item != column.Text || SelectedColumns != null)
                {
                    SelectedColumns.Add(column.Text);
                }
            }
        }
    }

    foreach (String column in SelectedColumns)
    {
        SelectedFieldsList.Items.Add(column);
    }
}

或者,我还需要添加允许用户通过循环列表框中的选定项目从列表中删除项目的功能。我试过这个:

protected void RemoveSelectedField(object sender, EventArgs e)
{
    foreach (ListItem field in SelectedFieldsList.Items)
    {
        if (field.Selected)
        {
            SelectedColumns.Remove(item);
        }
    }

    foreach (String field in SelectedColumns)
    {
        SelectedFieldsList.Items.Add(field);
    }
}

以及:

protected void RemoveSelectedField(object sender, EventArgs e)
{
    foreach (ListItem field in SelectedFieldsList.Items)
    {
        if (field.Selected)
        {
            foreach (String item in SelectedColumns)
            {
                if (item == field.Text)
                {
                    SelectedColumns.Remove(item);
                }
            }
        }
    }

    foreach (String field in SelectedColumns)
    {
        SelectedFieldsList.Items.Add(field);
    }
}

这些都没有从列表框m中删除所选项目(我也假设字符串列表)。关于检查是否已经存在的项目已经存在我还尝试过:

protected void AddSelectedField(object sender, EventArgs e)
{
    foreach (ListItem column in ColumnsList.Items)
    {
        if (column.Selected && !SelectedColumns.Contains(column.Text))
        {
            SelectedColumns.Add(column.Text);
        }
    }

    foreach (String column in SelectedColumns)
    {
        SelectedFieldsList.Items.Add(column);
    }
}

它好像忽略了if语句的第二部分,它检查列表是否包含当前列表项的文本。

2 个答案:

答案 0 :(得分:0)

如果SelectedColumns是List,为什么不使用Contains()方法?

    if (column.Selected && !SelectedColumns.Contains(column.Text))
    {
        SelectedColumns.Add(column.Text);
    }

答案 1 :(得分:0)

新功能有一个很大的禁忌......

您无法遍历列表,同时也无法更改该列表:

        foreach (String item in SelectedColumns)
        {
            if (item == field.Text)
            {
                SelectedColumns.Remove(item);
            }
        }

和...

        foreach (String item in SelectedColumns)
        {
             if (item != column.Text || SelectedColumns != null)
                SelectedColumns.Add(item.text);
        }

执行此操作会导致异常,这使我认为代码甚至没有被调用。

另外,对于第二个代码snippit,我认为SelectedColumns!= null可能不是你的意思,因为如果它是null你就不会迭代它。

最后,您可以使用var而不是String / ListItem并调试以查看实际迭代的对象类型。