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

おそらく単純なことだとは思いますが、検索すると文字列を取り戻すことに関連しているように見えます。

編集:チェックされたタグの数に関係なく、 chooseTagsは常に null です。

EDIT 2: @Jony のおかげで、いまいましい... これは部分的にソートされています。しかし、InvalidCastException をスローせずに複数のタグをチェックすることはできません。

EDIT 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で失敗するはずです。 It should be fine then... にList<Tag> chosenTags = null;置き換える必要があります。List<Tag> chosenTags = new List<Tag>();

于 2012-08-09T19:09:06.627 に答える
1

Jonyが述べたように、このコードは失敗します。オブジェクトにnullを割り当てるだけでなく、「NEWING」と呼ばれるものを実行する必要があります。オブジェクトは、新しいキーワードを意味します

チェックリストボックスで選択されたタグに基づいてドキュメントをフィルタリングしようとしています - クラスタグのオブジェクトが取り込まれています - しかし、検索するために項目にアクセスできません。いくつかのバリエーションを試しましたが、今使用している方法は次のとおりです。これは、変更すると機能します。

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(); このようなものを使用して、必要に応じて個々のアイテムをテストすることもできます

于 2012-08-09T19:14:51.580 に答える