1

I am trying to update current items, but all items in the list get updated why?

 public override void ItemAdding(SPItemEventProperties properties)
    {
        using (SPWeb web = properties.OpenWeb())
        {

            SPList myList = web.Lists.TryGetList("DocumentList");
            SPListItemCollection itemCollection = myList.Items;
            web.AllowUnsafeUpdates = true;

            for (int iCount = 0; iCount < itemCollection.Count; iCount++)
            {

                SPListItem _item = itemCollection[iCount];

                _item["MyField"] = "";
                _item.Update();
            }




        }}
6
  • You just want to update the item currently being added? In the code you are updating all the items Commented Jun 17, 2015 at 10:04
  • Because you loop over all items and update them? Commented Jun 17, 2015 at 10:08
  • @ArsalanAdamKhatri Yes i only want to update the current item being added,
    – Batistuta
    Commented Jun 17, 2015 at 10:13
  • @TheRock use properties.ListItem instead, because that is the one that is being added. Don't loop over all items. Commented Jun 17, 2015 at 10:14
  • properties.ListItem is null in ItemAdding. If you want to use that, use ItemAdded.
    – Jussi Palo
    Commented Jun 17, 2015 at 10:20

2 Answers 2

1

You can modify item properties, except ID like this.

public override void ItemAdding(SPItemEventProperties properties)
{
    string mycol_internal = "";

    using (SPWeb web = properties.OpenWeb()) {
        mycol_internal = web.Lists[properties.ListId].Fields["My Column"].InternalName;
    }

    properties.AfterProperties[mycol_internal] = "your new value";

    //Update title with another column value etc
    properties.AfterProperties["Title"] = properties.AfterProperties[mycol_internal].ToString();
}

Source

OR, use ItemAdded where properties.ListItem is available.

6
  • I want to modify an existing column and set the string to empty, should i not use Itemadded now?
    – Batistuta
    Commented Jun 17, 2015 at 10:20
  • I'd say it's a matter of preference. Should work both ways.
    – Jussi Palo
    Commented Jun 17, 2015 at 10:22
  • Alright will try it out now using ItemAdded..
    – Batistuta
    Commented Jun 17, 2015 at 10:28
  • Well, if you just want to clear one field, I'd say ItemAdding is much neater, no need to check in after changes and worry about versions if you have versioning enabled.
    – Jussi Palo
    Commented Jun 17, 2015 at 10:29
  • I will update i dont get it to work still using ItemAdded
    – Batistuta
    Commented Jun 17, 2015 at 10:33
-1

In the code you have written a for loop which is looping all the items in the list. So for every item it is updating the column value until it reaches the last list item count. Use properties.ListItem to update the current item in which you have ItemAdding event will fire.

4
  • Can you please elaborate your answer with some code examples you can take reference of one available in question.
    – Asad Refai
    Commented Jun 17, 2015 at 10:32
  • No need to elaborate, properties.ListItem is null in ItemAdding.
    – Jussi Palo
    Commented Jun 17, 2015 at 10:50
  • My bad, Ithought you are using ItemAdded event. In item adding you will not get properties.Listitem rather use AfterProperties as follows
    – shatabdi
    Commented Jun 17, 2015 at 10:59
  • public override void ItemAdding(SPItemEventProperties properties) { properties.AfterProperties["MyField"] =""; }
    – shatabdi
    Commented Jun 17, 2015 at 11:00

Not the answer you're looking for? Browse other questions tagged or ask your own question.