Computing value sums in a custom grid
You've already placed a constraint on the first parameter that it should be IConvertible, so the methods of that interface is available to you.

decimal decimalValueIfNull = valueIfNull.ToDecimal(CultureInfo.InvariantCulture);


Converting back to the generic type won't be as straight forward.  When casting between an object and a value type, no conversions will be made and you are just boxing/unboxing the value.  Since you have a constraint that the type be a value type, the casts won't really work here.  In fact, I don't think it's even possible to do so generically.  If a conversion exists from decimal to the type you wouldn't be able to express that here.  And you won't be able to use the Convert class to do the conversion, there's no way to "add" conversions to existing convertible types.

Your best (and probably only) option would be to convert it to a dynamic variable and let the runtime figure out whether or not that conversion exists.  That way if you have a custom ValueType here that has an implicit or explicit conversion from a decimal, it will be used.

return (T)(dynamic)sum;


If you know for sure that the types that are used here can be converted from a decimal, then you could convert back using IConvertible.ToType().

return ((IConvertible)sum).ToType(typeof(T), CultureInfo.InvariantCulture);