1) Take instance of your site collection and web:
SPSite currentSite = SPContext.Current.Site;
SPWeb currentRootWeb = currentSite.RootWeb;
2) Suppose we have the name of discussion list - "MyDiscussionList".
Get GUID of this list:
Guid myDiscussionListGUID = Guid.NewGuid();
foreach (SPList list in currentRootWeb.Lists)
{
if (list.BaseTemplate.ToString() == "DiscussionBoard" && list.Title == "MyDiscussionList")
{
myDiscussionListGUID = list.ID; // Read GUID of Discussion List
break;
}
}
Tips:
a) list.ItemCount will return all discussions and their replies
b) list.Items.Count will return only replies
3) Get your list:
SPList myDiscussionList = currentRootWeb.Lists.GetList(myDiscussionListGUID, false);
4) Create a new Discussion:
SPListItem newItem = SPUtility.CreateNewDiscussion(myDiscussionList.Items, "New Message using code");
newItem["Body"] = "My new message content using code";
newItem.Update();
5) How to read all discussions:
foreach (SPListItem folder in myDiscussionList.Folders)
{
Response.Write("Folder Name: " + folder.Name + "<BR>");
Response.Write("Folder ID: " + folder.ID + "<BR>");
Response.Write("Attachments Count: " + folder.Attachments.Count + "<BR>"); // Returns attachment count
// Code to read attachment URL.
for (int i = 0; i < folder.Attachments.Count; i++)
{
Response.Write("Attachment Url " + folder.Attachments.UrlPrefix + folder.Attachments + "<BR>");
}
// Read body of attachment
Response.Write("Body: " + folder.Fields["Body"].GetFieldValueAsText(folder["Body"]) + "<BR>");
}
6) If you want to delete a discussion:
SPListItem listItemParentToDelete = null;
foreach (SPListItem folder in myDiscussionList.Folders)
{
listItemParentToDelete = folder;
}
if (listItemParentToDelete != null)
{
listItemParentToDelete.Delete();
}
7) Loop through all discussion replies:
foreach (SPListItem listItem in myDiscussionList.Items)
{
Response.Write("Item DisplayName: " + listItem.DisplayName + "<BR>"); // Returns Title of Discussion
Response.Write("List ID: " + listItem.ID + "<BR>");
Response.Write("List Folder ID: " + listItem.Fields["Parent Folder Id"].GetFieldValueAsText(listItem["Parent Folder Id"]).ToString() + "<BR>"); // Returns ID of Parent Discussion
Response.Write("Body: " + listItem.Fields["Body"].GetFieldValueAsText(listItem["Body"]) + "<BR>");
// Create Parent List Item
int parentListID = Convert.ToInt32(listItem.Fields["Parent Folder Id"].GetFieldValueAsText(listItem["Parent Folder Id"]));
SPListItem parentListItem = lvContentItemsDiscussionsList.GetItemById(parentListID);
Response.Write("Parent List Item Name: " + parentListItem.Name + "<BR>");
// Code to Reply to a Discussion Message
SPListItem reply = SPUtility.CreateNewDiscussionReply(parentListItem);
reply["Body"] = "<div class=ExternalClass89C47CD7892B4279A8F42A65DD63AE3A><div> </div> <div>Reply to the new message<br><br> <hr> <b>From: </b>Admin<br><b>Posted: </b>Friday, July 20, 2007 4:01 AM<br><b>Subject: </b>New message<br><br> <div class=ExternalClass3D04672E599B486F9ECB76C138494708> <div>My new message content</div></div></div></div>";
reply["TrimmedBody"] = "<div class=ExternalClass677134B4EA284660B1B236824800345C><div> </div> <div>Reply to the new message<br></div></div>";
reply.Update();
// Code to delete a discussion reply
listItemToDelete = listItem;
}
8) Code to delete a discussion reply:
SPListItem listItemToDelete = null;
foreach (SPListItem listItem in myDiscussionList.Items)
{
listItemToDelete = listItem;
}
// Code to delete a discussion reply
if (listItemToDelete != null)
{
listItemToDelete.Delete();
}
Note: You need to allow unsafe updates in order to do any operation on SharePoint list directly.
currentRootWeb.AllowUnsafeUpdates = true;
原帖地址:http://www.beyondweblogs.com/post/SharePoint-Discussion-Board-Common-Operations-through-Code.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?