2010-09-24 3 views
5

Enviroment Löschen: asp.net Framework 2.0Object Probleme

Ich habe Probleme mit dem Delete Verfahren und ObjectDataSource auf einem benutzerdefinierten Objekt mit. Die Select, Insert und Update Methoden funktioniert gut. Hier

ist der Code der Klassen:

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

Und das ist der Code für die ObjectDataSource und die 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> 

Wenn ich versuche, ein Element zu löschen und machen Sie einen Debug Verfahren Delete, hat es den Parameter deletedCar wie folgt aus:

ID = 0 Descript ion = null

Aber wenn ich eine Debug auf die Update oder Insert Methoden machen das Car Objekt mit den richtigen Daten korrekt ausgefüllt ist.

Was ist los?

Antwort

8

Legen Sie DataKeyNames (die Primärschlüsseleigenschaft) in DetailsView fest.

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

Ja, das war es, Danke! – Unlimited071