Fixing EntityDataSourceWrapper Error in EF (VB Version)
I lost a lot of time today on this error:
‘EntityDataSourceWrapper' does not contain a property with the name …'
The project is ASP.NET 3.5 using Entity Framework and VB. I’m using the Telerik RadControls for ASP.NET AJAX (a sweet suite!). In my app, clicking a row’s Edit button on the RADGrid opens the popup Edit form for updating the data.
It seemed like a simple task to get the DataItem for the row (item), extract a value, and use that value as the SelectedValue of radiobuttonlist. It turns out that you need heroic measures to get a value out of e.Item.DataItem in Entity Framework! Sheesh!
Here’s the VB version of LinqHelpers as posted by Diego B Vega. It noses around in the DataItem to return a TEntity (whatever that is!). I’m still trying to figure this code out, but at least I’m productive again!
' LinqHelpers.vb - Put it into the App_Code folder
Namespace LinqHelpers
Public NotInheritable Class EntityDataSourceExtensions
Public Shared Function GetItemObject _
(Of TEntity As Class)(ByVal dataItem As Object) As TEntity
Dim entity As TEntity = TryCast(dataItem, TEntity)
If entity IsNot Nothing Then
Return entity
End If
Dim td = TryCast(dataItem, ICustomTypeDescriptor)
If td IsNot Nothing Then
Return DirectCast(td.GetPropertyOwner(Nothing), TEntity)
End If
Return Nothing
End Function
End Class
End Namespace
Once you’ve got a way to mess around inside the DataItem, you can fix up the radiobuttonlist (a dropdownlist would be similar). Do this in the RadGrid’s ItemCreated event as shown:
Protected Sub RadGrid1_ItemCreated _
(ByVal sender As Object, ByVal e As _
Telerik.Web.UI.GridItemEventArgs) _
Handles RadGrid1.ItemCreated
' Sets the selected values for radiobuttons and
' ddls when displaying the edit form
If (TypeOf e.Item Is GridEditFormItem) And _
e.Item.IsInEditMode And _
(Not IsNothing(e.Item.DataItem)) Then
' Get a reference to the editformitem
Dim editFormItem As GridEditFormItem = _
CType(e.Item, GridEditFormItem)
' Get the entity that's being used
'with this screen (requires a LINQ helper)
Dim entity = LinqHelpers.EntityDataSourceExtensions. _
GetItemObject(Of CMS_Item)(e.Item.DataItem)
' Get a reference to the radiobutton list
' and set its value
Dim rbl As RadioButtonList = _
editFormItem.FindControl("radItemType")
rbl.SelectedValue = entity.ItemType
' Get a reference to the Product radiobutton
' and set its value
rbl = editFormItem.FindControl("radProduct")
rbl.SelectedValue = entity.Product.ToString()
' Set the Stocked radiobuttonlist
rbl = editFormItem.FindControl("radStocked")
rbl.SelectedValue = entity.Stocked.ToString()
End If
End Sub
Thanks to all the community contributions that help solve these issues. Here’s a thread with an answer by Microsoft’s Diego B Vega that got me over the hump: http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/a6c0a1f0-349f-4163-8fcb-a0c5a1e7c5a6/
Am I the only one who spins on these things???
Ken
MVP [ASP.NET]