我已将datagrid绑定到列表中。我遵循Repository模式并使用EF v4.1。我需要删除row_deleting事件上的实体。这是代码:
protected void grdBooks_RowDeleting(object sender, System.Web.UI.WebControls.GridViewDeleteEventArgs e)
{
int bookId = (int)e.Keys[0];
//grdBooks.Rows[e.RowIndex] //this item's dataItem is always null.
}
当我使用Entities时,我需要实际的Entity将它传递给我的GenericRepository,它将删除该实体。我确实得到了bookId,但是我不想做傻事,比如使用这个bookId从数据库中获取Entity,然后将它传递给我的delete方法。为什么DataItem总是为null,我该怎么办才能找回我的实体?
提前致谢:)
答案 0 :(得分:2)
DataItem = null,因为当您在Page_Load
中仅将数据数据绑定到gridview一次时public void Page_Load()
{
if (!Page.IsPostBack)
{
grid.DataSource = GetDataSource();
grid.DataBind();
}
}
数据存储在Viewstate中。单击删除后您回发到服务器。数据仍存在于Gridview的视图状态中,而不是反弹。
如果您有Id,则可以删除该对象。你可以用3种不同的方式做到这一点
http://blogs.msdn.com/b/alexj/archive/2009/03/27/tip-9-deleting-an-object-without-retrieving-it.aspx
调用context.ExecuteStoreCommand并执行常规DELETE FROM -http://msdn.microsoft.com/en-us/library/ee358769.aspx(第二个示例)
在数据库上创建存储过程,将其导入模型并使用context.ExecuteFunction()
答案 1 :(得分:1)
您无需提取任何内容即可将其删除。只需使用指定的Id创建实体,将其附加,然后调用Remove。
Person user = new Person() { PersonId = Id };
db.Persons.Attach(person);
db.Persons.Remove(person);
db.SaveChanges();
答案 2 :(得分:0)
我不确定我是否理解你的问题,但我认为你应该尝试这个
grdBooks.Rows[e.RowIndex].Cells[index].Text;