Confusing error while using an EntityDataSource with a GridView update
Linq-to-Entities baffled me yet again today.
I was simply trying to bind an EntityDataSource to a GridView then do an update.
It worked as expected, even with the foreign keys... but that was only if I used the auto-generated columns.
When I tried to make the fields myself with TemplateFields, all hell broke loose and this error popped up.
While this may make sense to some people, it made none to me, so I basically just started changing things one-by-one until something broke.
When I changed AutoGenerateColumns to 'false' it would break. But... if I added in a
BoundField that had the primary key in it, it would work?
Ok, great, but I didn't want the user to see the primary key field, they don't care about it, so I set that
BoundField to Visible="false"; it broke again.
solution
You need to explicitly include a
BoundField of the primary key!
Since I didn't want the user to see my primary key, I had to resort to hiding it via css:
<asp:BoundField
DataField="my_primary_key" ItemStyle-CssClass="hidden" HeaderStyle-CssClass="hidden" />
Where 'hidden' is a class in css that has it's display set to 'none'.
Not sure why Entities can't figure this out like all the other DataSources...