应用场景;开发表单时,复杂的列表项包含有明细表,这里只能把明细表存在子表或数据库里。当删除这些列表项目时如果不及时删除相关子列表,将产生大量数据。
今天写程序把相关子列表数据删除。
首先创建一个项目;sharepoint2010项目
/// <summary>
/// 列表项事件
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// 正在删除项.
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
base.ItemDeleting(properties);
SPListItem item = properties.ListItem;
//string sql = "delete from ECS where ItemID='" + item.UniqueId.ToString() + "'";
//bool rst = sqlBase.RunSql(sql);
DelListItem(item.UniqueId.ToString());
}
/// <summary>
/// 保存数据到list
/// </summary>
private void DelListItem(string ItemID)
{
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb myweb = site.OpenWeb("ListDBcenter"))
{
SPList list = myweb.Lists["List_officesupply"];
SPQuery myquery = new SPQuery();
myquery.Query = string.Format("<Where><Eq><FieldRef Name='ItmeID'/><Value Type='Text'>{0}</Value></Eq></Where>", ItemID);
//得到caml的结果
SPListItemCollection items = list.GetItems(myquery);
foreach (SPListItem item in items)
{
item.Delete();
site.AllowUnsafeUpdates = true;
myweb.AllowUnsafeUpdates = true;
item.Update();
}
}
}
}
部署 如果出现 错误 35 部署步骤“激活功能”中出现错误:
/// <summary>
/// 列表项事件
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// 正在删除项.
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
SPListItem item = properties.ListItem;
SPSite site = properties.OpenSite();
DelListItem(item.UniqueId.ToString(), site);
base.ItemDeleting(properties);
}
/// <summary>
/// 保存数据到list
/// </summary>
private void DelListItem(string ItemID, SPSite siteID)
{
using (SPSite site = siteID)
{
using (SPWeb myweb = site.OpenWeb("ListDBcenter"))
{
SPList list = myweb.Lists["List_officesupply"];
SPQuery myquery = new SPQuery();
myquery.Query = string.Format("<Where><Eq><FieldRef Name='ItmeID'/><Value Type='Text'>{0}</Value></Eq></Where>", ItemID);
//得到caml的结果
SPListItemCollection items = list.GetItems(myquery);
foreach (SPListItem item in items)
{
item.Delete();
site.AllowUnsafeUpdates = true;
myweb.AllowUnsafeUpdates = true;
//item.Update();
}
}
}
}
}
代码写完 但是会有一个问题,一个 很严重的问题,就是这个事件是针对的某一种类型,而不是一个列表。
解决方法 我写下一篇