我正在尝试根据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();
}
}
答案 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(); 你可以使用这样的东西测试一个或多个项目,如果你愿意的话