私はGridViewをEntityDataSourceに接続しています。'System.Data.Objects.MaterializedDataRecord'タイプのオブジェクトをキャストできません
EntityDataSourceには、Where Parametersの内部パラメータがあります。この時点まですべてがうまくいきます。
<asp:EntityDataSource ID="EntityDataSourceListAuthors" runat="server" ConnectionString="name=CmsConnectionStringEntityDataModel"
DefaultContainerName="CmsConnectionStringEntityDataModel" EnableFlattening="False"
EntitySetName="CmsAuthors" EntityTypeFilter="" OrderBy="it.FirstName" Select="it.AuthorId, it.UserId, it.FirstName, it.LastName, it.NoteInternal, it.ContentAuthor"
Where="it.UserId = @ActiveUser">
</asp:EntityDataSource>
私はイベントを使用するには、すべての単一の行の値を取得し、いくつかのロジックを実行するためにEntity FrameworkのをRowDataBound。
できるだけ早く私は、私はこのエラーが発生したコードの実行として:EntityDataSourceのSMTにパラメータを追加するとき
Unable to cast object of type 'System.Data.Objects.MaterializedDataRecord' to type 'WebProject.DataAccess.DatabaseModels.CmsAuthor'.
をそれは私には思われるので、私はすべてのアイデア 以前のようにEFを使用することはできませんよ変化していますか?みんなありがとう! RowDataBoundイベントでEntityDataSourceを結合上
protected void uxListAuthorsDisplayer_RowDataBound(object sender, GridViewRowEventArgs e)
{
switch (e.Row.RowType)
{
// In case type of row is DataRow (a data row of GridView)
case DataControlRowType.DataRow:
// Display friendly User's Name instead of his Guid
// Retrive underlying data from a single row rappresented in GridView (use Entity Framwork)
WebProject.DataAccess.DatabaseModels.CmsAuthor myRow = (WebProject.DataAccess.DatabaseModels.CmsAuthor)e.Row.DataItem;
// Retrive the Guid for a User in a specific row
Guid myUserGuid = (Guid)myRow.UserId;
// Find out used UserName using Guid UserId
MembershipUser mySelectedUser = Membership.GetUser(myUserGuid);
// Write friendly User's Name instead of his Guid value in a specific Grid View Cell
e.Row.Cells[3].Text = mySelectedUser.UserName;
// Disable Delete Button if a Content has associated an Author
// Use Entity Framwork for retriving data - Create a "Context" for a single Row
using (CmsConnectionStringEntityDataModel context = new CmsConnectionStringEntityDataModel())
{
// Find out Row Id and create an varaible to store it
int myWorkingRowId = myRow.AuthorId;
// Find the Edit Link
HyperLink myEditLink = (HyperLink)e.Row.FindControl("uxLinkEditButton");
// Find the Delete Button
LinkButton myDeleteButton = (LinkButton)e.Row.FindControl("uxLinkDeleteButton");
// Find the System Note Label
Label mySystemNote = (Label)e.Row.FindControl("uxSystemNoteDisplayer");
// Use of Lamba Espression with EF to check if an Author is associated with a Content
CmsContent authorIdInContent = context.CmsContents.FirstOrDefault(x => x.AuthorId == myWorkingRowId);
// Make visible or invisible the Delete Button if an Author is associated to a Content
if (authorIdInContent != null)
{
myDeleteButton.Visible = false;
mySystemNote.Text = "Author is being used in Contents";
}
else
{
myDeleteButton.Visible = true;
}
// Programmatically Limiting Functionality depending on User's Roles
myEditLink.Visible = User.IsInRole("CMS-ADMINISTRATOR") || User.IsInRole("CMS-AUTHOR") || User.IsInRole("CMS-EDITOR");
myDeleteButton.Visible = User.IsInRole("CMS-ADMINISTRATOR");
}
break;
}
}
コードを改行することは実際には不可能です。 –
これに関するご意見は? – GibboK