XXX对象无法强制转换成“System.Data.DataRowView”2天了还没解决

时间:2021-07-12 19:19:18
在3层结构中我定义了2个类
实体类
 [Serializable]
    public class CartItemInfo
    {

        private string name;

        /// <summary>
        /// 构造方法,初始化商品的各个属性
        /// </summary>
        /// <param name="name">名称</param>

        public CartItemInfo(string name)
        {
            this.name = name;
        }


        public string Name
        {
            get { return name; }
        }

业务类
[Serializable]
    public class Cart
    {
  
private Dictionary<string, CartItemInfo> cartItems = new Dictionary<string, CartItemInfo>();

        public ICollection<CartItemInfo> CartItems
        {
            get { return cartItems.Values; }
        }

用户层里面的Repeater控件的数据绑定方法为
    private void BindCart()
    {
        ICollection<CartItemInfo> cart = Cart.CartItems;
        if (cart.Count > 0)
        {
            repShoppingCart.DataSource = cart;
            repShoppingCart.DataBind();
            PrintTotal();
            //plhTotal.Visible = true;
        }
    }

现在的问题是我要在Repeater的OnItemDataBound事件中执行转换就提示CartItemInfo对象不能强制转换为“System.Data.DataRowView”

    protected void repShoppingCart_OnItemDataBound(object source,RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
        DataRowView rowv = (DataRowView)e.Item.DataItem
    }

13 个解决方案

#1


转来干嘛??你这样转不对吧!

#2


我转了要得到name列后要格式化

#3


就想这样
protected void Products_ItemDataBound(object sender, DataListItemEventArgs e)
            {
            if (e.Item.ItemType == ListItemType.Item ||
            e.Item.ItemType == ListItemType.AlternatingItem)
            {
            Northwind.ProductsRow product =
            (Northwind.ProductsRow)((System.Data.DataRowView)e.Item.DataItem).Row;
            // Reference the Delete button
            Button db = (Button)e.Item.FindControl("DeleteButton");
            // Assign the Delete button's OnClientClick property
            db.OnClientClick =
            string.Format("return confirm('Are you sure that you want to delete" +
            " the product {0}?');", product.ProductName.Replace("'", @"\'"));
            }
            }

#4


CartItemInfo cart = (CartItemInfo)e.Item.DataItem
cart.Name
.....

#5


CartItemInfo cart = (CartItemInfo)e.Item.DataItem
cart.Name
.....。。。。。。。。。。。。。。。。。。。。。。。。。。。。
报错:CartItemInfo对象不能强制转换为“System.Data.DataRowView”

#6


DataRowView rowv = (DataRowView)e.Item.DataItem;

>>>>

KeyValuePair<string, CartItemInfo> cartItem = e.Item.DataItem as KeyValuePair<string, CartItemInfo>;
// KeyValuePair<string, CartItemInfo> cartItem = (KeyValuePair<string, CartItemInfo>)e.Item.DataItem;
// string key = cartItem.Key;
// CartItemInfo cartItemInfo = cartItem.Value;

#7


KeyValuePair<string, CartItemInfo> cartItem = (KeyValuePair<string, CartItemInfo>)e.Item.DataItem
指定的转换无效

#8


1.先屏蔽OnItemDataBound事件,看绑定是否正常;
2.单个值就不要泛了吧。

#9


绑定的正常的

我贴的代码只是一部分,主要是用来实现购物车的

#10


采用动态绑定,绑定Field指定为CartItemInfo.Name

#11


不明白!
我这个购物车是根据petshop4.0来写的

#12


自己顶把

#13


sorry, it's all my fault.


// ...
ICollection<CartItemInfo> cart = Cart.CartItems; // >>>
if (cart.Count > 0)
{
repShoppingCart.DataSource = cart; // >>> the type of the item in the datasource is CartItemInfo
// ...


So,

DataRowView rowv = (DataRowView)e.Item.DataItem

>>>

CartItemInfo cartItem = e.Item.DataItem as CartItemInfo;
if(cartItem != null) {
  // ...
}



报错:CartItemInfo对象不能强制转换为“System.Data.DataRowView”
==========
Where is from your“System.Data.DataRowView”? It's CarItemInfo.

#1


转来干嘛??你这样转不对吧!

#2


我转了要得到name列后要格式化

#3


就想这样
protected void Products_ItemDataBound(object sender, DataListItemEventArgs e)
            {
            if (e.Item.ItemType == ListItemType.Item ||
            e.Item.ItemType == ListItemType.AlternatingItem)
            {
            Northwind.ProductsRow product =
            (Northwind.ProductsRow)((System.Data.DataRowView)e.Item.DataItem).Row;
            // Reference the Delete button
            Button db = (Button)e.Item.FindControl("DeleteButton");
            // Assign the Delete button's OnClientClick property
            db.OnClientClick =
            string.Format("return confirm('Are you sure that you want to delete" +
            " the product {0}?');", product.ProductName.Replace("'", @"\'"));
            }
            }

#4


CartItemInfo cart = (CartItemInfo)e.Item.DataItem
cart.Name
.....

#5


CartItemInfo cart = (CartItemInfo)e.Item.DataItem
cart.Name
.....。。。。。。。。。。。。。。。。。。。。。。。。。。。。
报错:CartItemInfo对象不能强制转换为“System.Data.DataRowView”

#6


DataRowView rowv = (DataRowView)e.Item.DataItem;

>>>>

KeyValuePair<string, CartItemInfo> cartItem = e.Item.DataItem as KeyValuePair<string, CartItemInfo>;
// KeyValuePair<string, CartItemInfo> cartItem = (KeyValuePair<string, CartItemInfo>)e.Item.DataItem;
// string key = cartItem.Key;
// CartItemInfo cartItemInfo = cartItem.Value;

#7


KeyValuePair<string, CartItemInfo> cartItem = (KeyValuePair<string, CartItemInfo>)e.Item.DataItem
指定的转换无效

#8


1.先屏蔽OnItemDataBound事件,看绑定是否正常;
2.单个值就不要泛了吧。

#9


绑定的正常的

我贴的代码只是一部分,主要是用来实现购物车的

#10


采用动态绑定,绑定Field指定为CartItemInfo.Name

#11


不明白!
我这个购物车是根据petshop4.0来写的

#12


自己顶把

#13


sorry, it's all my fault.


// ...
ICollection<CartItemInfo> cart = Cart.CartItems; // >>>
if (cart.Count > 0)
{
repShoppingCart.DataSource = cart; // >>> the type of the item in the datasource is CartItemInfo
// ...


So,

DataRowView rowv = (DataRowView)e.Item.DataItem

>>>

CartItemInfo cartItem = e.Item.DataItem as CartItemInfo;
if(cartItem != null) {
  // ...
}



报错:CartItemInfo对象不能强制转换为“System.Data.DataRowView”
==========
Where is from your“System.Data.DataRowView”? It's CarItemInfo.