ObjectDataSource删除问题

时间:2010-09-24 22:34:15

标签: asp.net ado.net objectdatasource

环境:asp.net framework 2.0

我在自定义对象上使用Delete方法和ObjectDataSource时遇到问题。 SelectInsertUpdate方法运行正常。

这是类的代码:

public class Car
{
    public string ID {get; set;}//I know this is 3.0+ syntax.
    public string Description {get; set;}//I know this is 3.0+ syntax.

    public bool Equals(Car other)
    {
        if (ReferenceEquals(null, other)) return false;
        if (ReferenceEquals(this, other)) return true;
        return other.ID == ID;
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (ReferenceEquals(this, obj)) return true;
        return obj.GetType() == typeof (Car) && Equals((Car) obj);
    }

    public override int GetHashCode()
    {
        return ID;
    }
}

public class CarList
{
    private static List<Car> _cars;

    public CarList()
    {
        if(_cars == null) 
            _cars = new List<Car>();

        //Create some cars and insert them here...
    }

    public List<Car> Select()
    {
        return _cars;
    }

    public void Update(Car updatedCar)
    {
        int i = _cars.IndexOf(updatedCar);
        if(i != -1)
        {
            _cars[i] = updatedCar;
        }
    }

    public void Insert(Car insertedCar)
    {
        _cars.Add(insertedCar);
    }

    public void Delete(Car deletedCar)
    {
        _cars.Remove(deletedCar);
    }
}

这是ObjectDataSourceDetailsView

的代码
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    DataObjectTypeName="Car"
    TypeName="CarList"
    DeleteMethod="Delete" 
    InsertMethod="Update" 
    SelectMethod="Select" 
    UpdateMethod="Update">
</asp:ObjectDataSource>

<asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False"
    CellPadding="4" DataSourceID="ObjectDataSource1" ForeColor="#333333" GridLines="None"
    Height="50px" Width="125px">
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
    <RowStyle BackColor="#EFF3FB" />
    <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <Fields>
        <asp:BoundField DataField="Id" HeaderText="Id" />
        <asp:BoundField DataField="Description" HeaderText="Model" />
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
    </Fields>
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <EditRowStyle BackColor="#2461BF" />
    <AlternatingRowStyle BackColor="White" />
</asp:DetailsView>

当我尝试删除一个Item并对方法Delete执行调试时,它具有如下参数deletedCar

ID = 0 描述=空

但是当我对UpdateInsert方法执行调试时,Car对象正确填充了正确的数据。

发生了什么事?

1 个答案:

答案 0 :(得分:8)

在DetailsView中设置DataKeyNames(主键属性)。

<asp:DetailsView DataKeyNames="ID" />