SharePoint 2010 ディスカッション掲示板をツリービューとして表示するビジュアル Web パーツを作成しようとしています。すべてのトピックを親ノードとして、各トピックのすべての返信を子ノードとして取得できますが、階層では取得できません。したがって、すべての返信 (以前の返信への返信も含む) は同じノード レベルにあります。ThreadIndex というプロパティがあり、階層上のどのレベルの返信であるかを追跡するために使用できます (最初の返信か、最初の返信への返信か、{最初の返信の返信への返信} かなど)。 2 行は threadingindex 値です。最初の返信に特定のスレッド インデックス値があり、それに対する返信にランダムな文字列が追加されたスレッド インデックス値があることがわかります。
これはどのように見えるかです: 私がどのように見えるか http://www.resizr.com/resized/d2eb.jpg
これは私がそれをどのように見せたいかです: 望ましい http://www.resizr.com/resized/8249.jpg
ヒントを教えてもらえますか?
public partial class HDRDiscussionTreeUserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> allTopics = new List<string>();
List<string> allreplies = new List<string>();
List<int> allpids = new List<int>();
HDRDiscussionTV.Nodes.Clear();
TreeNode node;
SPSite currentSite = SPContext.Current.Site;
SPWeb web = currentSite.RootWeb;
//Get the Discussion list
SPList lst = web.Lists["SP2017Discussion"];
SPQuery query0 = new SPQuery();
//get all topics
query0.Query = "<Where><IsNotNull><FieldRef Name=\"Title\" /></IsNotNull></Where>";
SPListItemCollection col = lst.GetItems(query0);
foreach (SPListItem item in col)
{
//listItem.Fields["Parent Folder Id"].GetFieldValueAsText(listItem["Parent Folder Id"]).ToString()
//string pfid = item.Fields["Parent Folder Id"].GetFieldValueAsText(item["Parent Folder Id"]).ToString();
int id = item.ID;
SPQuery query = new SPQuery();
SPListItem topic = item;
//allTopics.Add(item.Title);
node = new TreeNode(item.Title);
HDRDiscussionTV.Nodes.Add(node);
SPQuery query1 = new SPQuery();
query1.Folder = item.Folder;
//get all replies
SPListItemCollection relatedDiscussions = lst.GetItems(query1);
try
{
if (relatedDiscussions.Count != 0)
{
int n = 1;
TreeNode parentNode1 = node;
for (int i = 0; i <= relatedDiscussions.Count; i++)
{
//int parentListID = Convert.ToInt32(relatedDiscussions[i].Fields["Parent Folder Id"].GetFieldValueAsText(relatedDiscussions[i]["Parent Folder Id"]));
string threading = relatedDiscussions[i]["ThreadIndex"].ToString();
string checkthreading = relatedDiscussions[n]["ThreadIndex"].ToString();
node = new TreeNode(relatedDiscussions[i]["ows_TrimmedBody"].ToString()+"|" + threading + "|");
parentNode1.ChildNodes.Add(node);
n = i + 1;
}
}
}
catch
{
}
}
}