在检查多个CheckedItem时访问它们

时间:2012-08-09 19:00:14

标签: c# checkedlistbox checkeditems

我正在尝试根据checkedlistbox中的选定标记过滤文档 - 它使用我的类标记的对象填充 - 但无法访问这些项目以进行搜索。我尝试过几种变体,但我现在使用的方法是:

private void chlbTags_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        List<Tag> chosenTags = new List<Tag>();
        foreach (object item in chlbTags.CheckedItems)
        {
            chosenTags.Add((Tag)item);
        }
        fillDocs(tags: chosenTags);
    }

我知道这可能是一件简单的事情,但我在搜索时似乎找到的似乎与获取字符串有关。

编辑:无论选中多少个标签, selectedTags 始终为空。

编辑2:感谢@Jony一个该死的......这已经部分排序了。但是现在我不能在不抛出InvalidCastException的情况下检查多个标签。

编辑3:如何填充选中的列表框。

public static List<Tag> fillUsed(List<int> docIds = null)
    {
        List<Tag> used;
        if (docIds == null)
        {
            used = (from t in frmFocus._context.Tags
                    where t.AllocateDocumentTags.Count > 0
                    select t).ToList();                
        }
        else
        {
            used = (from id in docIds
                    join adt in frmFocus._context.AllocateDocumentTags on 
                             id equals adt.documentId
                    join t in _tags on adt.tagId equals t.id
                    select t).ToList();

        }
        return used;
    }

感谢任何帮助,谢谢。

此部分有效

public void fillDocs(List<Tag> tags = null)
{ 
   lvDownload.Items.Clear(); 
   if (tags != null) 
   { 
      docs = docManagement.fillUp(tags: tags);
   } 
   else
   { 
      docs = docManagement.fillUp(); 
   }
}

2 个答案:

答案 0 :(得分:2)

您发布的代码应该失败,并带有 NullReferenceException 。 您应该将List<Tag> chosenTags = null;替换为List<Tag> chosenTags = new List<Tag>();
它应该没问题......

答案 1 :(得分:1)

像Jony所说的那样 这个代码将失败你必须做的不仅仅是为对象分配null ..你需要做他们所谓的“NEWING”对象,关键词 new

我正在尝试根据checkedlistbox中的选定标签过滤文档 - 它填充了我的类Tag的对象 - 但是无法访问这些项目以进行搜索。我尝试了几种变体,但我现在使用的方法是: 如果你改变它,这将有效。

private void chlbTags_ItemCheck(object sender, ItemCheckEventArgs e)
{
   List<Tag> chosenTags = new List<Tag>();
   foreach (object item in chlbTags.CheckedItems)
   {
      Tag tag = (Tag) item.Tag;
      chosenTags.Add(tag);  
     -- your code chosenTags.Add((Tag)item);
   }
   fillDocs(tags: chosenTags);
}

必须通过获取字符串属性来完成转换     // checkBox是CheckBox     string s = checkBox.Tag.ToString(); 你可以使用这样的东西测试一个或多个项目,如果你愿意的话