【问题标题】:How to get the anonymousType dataItem from gridview_RowDeleting event如何从 gridview_RowDeleting 事件中获取anonymousType dataItem
【发布时间】:2012-05-08 05:18:21
【问题描述】:

我想在 RowDeleting 事件中从 GridView 获取 Id,我试过这样:

        protected void gvHouse_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            Guid hholder = (Guid)(e.Values[0]);

            using (var dataContext = new realtydbEntities())
            {
                var house = (from h in dataContext.Households.Include("aspnet_Users.aspnet_Membership")
                             where h.HouseholdID == hholder
                             select h).First();
                dataContext.DeleteObject(house);
                dataContext.SaveChanges();
            }
        }

但它不起作用。

匿名类型是这样的,我使用 Listthis anonymousType> 绑定到 GridView 的数据源:

                         new
                         {
                             Id = u.HouseholdID,
                             BuNo = u.Building.BuildingName,
                             UnNo = u.UnitNo,
                             DepNo = u.DepartmentNo,
                             Name = u.aspnet_Users.UserName,
                             Corp = u.Corporation,
                             IdNumber = u.IdNumber,
                             Telephone = u.Telephone,
                             OtherHouseMembers = u.OtherHouseMembers,
                             OtherInfo = u.OtherInfo,
                             CrDate = u.aspnet_Users.aspnet_Membership.CreateDate
                         });

我想获取匿名对象或只是获取 ID 属性的值。

【问题讨论】:

  • 如何将数据绑定到 gridview ?
  • @Habib.OSU 我使用 List 绑定到 gridview
  • @Kevin “它不起作用”是一个非常广泛的声明。你得到一个编译错误?运行时异常?没有例外,但行为不正确?请详细说明。

标签: c# asp.net entity-framework webforms


【解决方案1】:

如果您使用的是 .net 4,则可以像这样利用 dynamic 类型:

// Get the reference to the bound item
dynamic item = gvHouse.Rows[e.RowIndex].DataItem; 
// Access item property
var itemId = item.Id;

请记住,您的类型的任何属性都不能通过智能感知获得,您只需要避免拼写错误。

【讨论】:

  • 不起作用,“RuntimeBinder.RuntimeBinderException:无法对空引用执行运行时绑定”
【解决方案2】:

这将为您提供 ID

 var HouseHoldid = Guid.Parse(gvHouse.Rows[e.RowIndex].Cells[0].Text);

如果 ID 是 int 类型,则:

 var HouseHoldid = Convert.ToInt32(gvHouse.Rows[e.RowIndex].Cells[0].Text);

删除后,您还必须刷新数据源。从绑定列表中删除项目并刷新gridview的数据源

【讨论】:

  • 上次检查时,无法通过强制转换将字符串转换为 Guid。
  • @phoog,我只是按照他的例子,你是对的我要删除它
【解决方案3】:

这样可以得到数据源

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{

    DataTable sourceData = (DataTable)GridView1.DataSource;

    sourceData.Rows[e.RowIndex].Delete();
}

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 2012-07-21
    • 1970-01-01
    • 2023-04-07
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多