I strongly suspect this builds but doesn't show the extra item. That's because you're adding the new item to a "temporary" list that you throw away, and then you're building a new list for the data source.
You want to call ToList()
just once, and use that list for both insertion and the data source:
var itemsList = items.ToList();
itemsList.Insert(0, new { code = string.Empty }); // Or use Add for the end...
cmbPaymentMethods.DataSource = itemsList;