grdview_RowDeleting数据项为空

问题描述 投票:0回答:3

我已将数据网格绑定到列表。我正在遵循存储库模式并使用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.
    }

[当我使用实体时,我需要实际的实体将其传递给我的GenericRepository,后者将删除该实体。我确实获得了bookId,但是我不想做一些愚蠢的事情,例如使用此bookId从数据库中获取Entity,然后将其传递给我的delete方法。为什么DataItem总是为null,我该怎么做才能取回我的实体?

c# asp.net entity-framework gridview aspxgridview
3个回答
1
投票

您不需要获取任何内容即可将其删除。只需创建具有指定ID的实体,将其附加,然后调用Remove。

Person user = new Person() { PersonId = Id };
db.Persons.Attach(person);
db.Persons.Remove(person);
db.SaveChanges();

2
投票

DataItem = null,因为在Page_Load中仅将数据绑定到Gridview一次时>

public void Page_Load()
{
    if (!Page.IsPostBack)
    {
        grid.DataSource = GetDataSource();
        grid.DataBind();
    }
}

数据存储在Viewstate中。单击删除后,您将回发到服务器。数据仍然存在于Gridview的视图状态中,并且不会反弹。

如果有ID,您可以删除对象。您可以通过3种不同的方式进行操作]

  1. http://blogs.msdn.com/b/alexj/archive/2009/03/27/tip-9-deleting-an-object-without-retrieving-it.aspx

  2. 调用context.ExecuteStoreCommand,然后从-http://msdn.microsoft.com/zh-cn/library/ee358769.aspx(第二个示例)中进行常规的删除]]] >>

  3. 在数据库上创建存储过程,将其导入模型并使用context.ExecuteFunction()]进行调用

  4. 我不知道我是否正确理解了您的问题,但我认为您应该尝试这样做

    grdBooks.Rows[e.RowIndex].Cells[index].Text; 
    

0
投票

我不知道我是否正确理解了您的问题,但我认为您应该尝试这样做

grdBooks.Rows[e.RowIndex].Cells[index].Text; 
© www.soinside.com 2019 - 2024. All rights reserved.