asp.net ado.net objectdatasource

asp.net - ObjectDataSource Eliminar problemas



ado.net (1)

Establezca DataKeyNames (propiedad de la clave principal) en DetailsView.

<asp:DetailsView DataKeyNames="ID" />

Medio ambiente: asp.net framework 2.0

Tengo problemas con el método Delete de ObjectDataSource en un objeto personalizado. Los métodos Select , Insert y Update funcionan bien.

Aquí está el código de las clases:

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

Y este es el código para ObjectDataSource y 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>

Cuando trato de eliminar un elemento y hago una depuración al método Delete , tiene el parámetro deletedCar así:

ID = 0 Descripción = null

Pero cuando hago una depuración en la Update o Insert métodos, el objeto Car se llena correctamente con los datos correctos.

Que esta pasando?