You would say they "had" a dinner because you are referring to an event, more than to a meal. In fact, "had" will go more comfortably with dinner in pretty much any situation. You will usually "have" or "attend" a dinner, whereas you might "eat" vegetables, bread, or fruit "at" the dinner.
New words, one handy idiom, and a 2-minute quiz — delivered to your inbox to keep your streak alive.