The Contains function will iterate through each item in the collection and call the Equals function against each item, returning the result.

Equals is a function derived from the base class Object and by default it will compare the in-memory address of two items.

Because you create a temporary object, these values will never be the same because you create a brand new object that is not in the ArrayList.

I'd think you could get the original object from the GridView and use that for the compare, but another way is to override the Equals function of your Servicedetails object and create some custom compare functionality.