在SharePoint列表中使用自增栏
问:sps2010里能不能新建个栏,数字型的,自动加一
答:在SharePoint里,有很多方法可以实现一个自增栏。在这里,我将介绍其中两种方式。
1、计算栏
2、列表项事件接收器
1、采用计算栏来实现:
这是最最简单的方法。这样无需编写任何代码就可以实现一个自增栏。我们只需要创建一个栏,栏类型选择计算值(基于其他栏的计算)。然后在公式一节,输入[ID]。
事实上,我们是取SharePoint内置的ID字段,该字段是从1开始的。
如果你想从100开始自增1,那么你可以修改公式为[ID]+99就可以了。
2、使用列表项事件接收器来实现:
当然如果通过代码实现就更地道了。这样的好处是可以允许用户编辑已生成的值。当然我们也可以可以写代码通过Feature的激活和关闭来控制该字段的可见性,只读性等。通过列表项事件接收器,在ItemAdded事件上,我们可以查找之前添加的项中的最大值,然后自增后将值存到当前新添加的项对应的自增栏上。
代码参考:
public override void ItemAdded(SPItemEventProperties properties) { SPWeb web = properties.OpenWeb(); bool allowUpdates = web.AllowUnsafeUpdates; //store original value this.EventFiringEnabled = false; try { web.AllowUnsafeUpdates = true; /*获取列表*/ SPList list = web.Lists[properties.ListId]; var highestvalue = 0; var objQuery = new SPQuery { Query ="<OrderBy><FieldRef Name='" + 栏名称 +"' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>", Folder = list.RootFolder }; SPListItemCollection colItems = list.GetItems(objQuery); if (colItems.Count > 0) { highestvalue = int.Parse(colItems[0][ColumnName].ToString()); } var currItem = properties.ListItem; currItem[ColumnName] = highestvalue + 1; currItem.SystemUpdate(false); } catch (Exception ex) { Trace.WriteLine(ex.Message); } finally { this.EventFiringEnabled = true; web.AllowUnsafeUpdates = allowUpdates; //恢复原值 } }
祝,工作开心!
参考资料