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?