-1

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

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(); 
   }
}
4

2 回答 2

2

您发布的代码应该会因NullReferenceException而失败。你应该替换List<Tag> chosenTags = null;List<Tag> chosenTags = new List<Tag>();
应该没问题...

于 2012-08-09T19:09:06.627 回答
1

就像 Jony 所说,这段代码将失败,你必须做的不仅仅是将 null 分配给对象。你需要做他们所谓的“NEWING”对象,意思是关键词new

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

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 is CheckBox string s = checkBox.Tag.ToString(); 如果您愿意,您也可以使用类似的东西来测试单个或多个项目

于 2012-08-09T19:14:51.580 回答