2010-09-24 77 views
5

环境:2.0的ObjectDataSource删除问题

我在与自定义对象上的Delete方法和ObjectDataSource问题asp.net框架。 Select,InsertUpdate方法工作正常。

这里是类的代码:

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); 
    } 
} 

这是为ObjectDataSource和代码DetailsView

<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> 

当我尝试删除一个项目,做了调试,以方法Delete,它有这样的参数deletedCar

ID = 0 描述ion = null

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

这是怎么回事?

回答

8

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

<asp:DetailsView DataKeyNames="ID" /> 
+0

是的,就是这样,谢谢! – Unlimited071 2010-09-27 13:49:19