文章出處
文章列表
問: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; //恢復原值 } }
祝,工作開心!
參考資料
文章列表
全站熱搜