Enviroment: asp.net framework 2.0
I'm having problems with the Delete
method of and ObjectDataSource
on a custom object. The Select
, Insert
and Update
methods works fine.
Here is the code of the classes:
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);
}
}
And this is the code for the ObjectDataSource
and the 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>
When I try to delete an Item and do a Debug to the method Delete
, it has the parameter deletedCar
like this:
ID=0 Description=null
But when I do a Debug to the Update
or Insert
Methods the Car
object is correctly populated with the correct data.
What is going on?
Set DataKeyNames (The primary key property) in DetailsView.
<asp:DetailsView DataKeyNames="ID" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With