2

ビューに基づいて、リスト内のアイテムの数を取得しようとしています。私がこれまでに試したすべての方法は、リストの総計のみを返します。検索中に遭遇したほぼすべての方法を試しましたが、すべて同じ結果になります。

これが私が試した方法の1つです:

SPWeb web = SPContext.Current.Web;
SPView view = web.GetViewFromUrl("url to my view");
int count = view.ParentList.GetItems(view).Count;

私のリストには28個のアイテムがありますが、参照しているビューはそれをフィルタリングし、4個のアイテムを表示します。私のカウントは28ではなく4になると思いますが、28は常に得られるものです。

これが私が試した別の方法です:

SPSite site = SPContext.Current.Site;
SPWeb web = site.OpenWeb();

SPQuery MyQuery = new SPQuery();
MyQuery.Query = "<Query><Where><Eq><FieldRef Name='strStatus' /><Value Type='Text'>submitted</Value></Eq></Where></Query>";

IEnumerable<SPListItem> results = web.Lists["Requests"].GetItems(MyQuery).Cast<SPListItem>();

// results.Count() is 28...  should be 4

したがって、このメソッドでは、ビューをスキップして、CAMLクエリを渡そうとしています。U2Uでクエリをテストすると、期待どおりに4つの結果が返されます...

全体像は、カスタムメニューコントロールのOnMenuItemDataBoundイベントハンドラー内でこれを行っていることです。それがまったく違いを生むかどうかはわかりませんが、私が目指しているのは、特定のリストのビューにリンクしている各アイテムが、リンクの横にそのビューのアイテムの数を表示するということです。

フィルタリングされた合計ではなくリストの合計を取得する理由はありますか?ありがとう!

4

1 に答える 1

6

私が正しく思い出させるなら、あなたはあなたの<Query>からを削除する必要がありますSPQuery。CAMLビルダーはそれを使用しますが、実際には不要SPQueryです。もちろん、フィールドが存在することを確認する必要があります。

MyQuery.Query = "<Where><Eq><FieldRef Name='strStatus' /><Value Type='Text'>submitted</Value></Eq></Where>";
于 2010-03-19T18:14:48.467 に答える