环境:asp.net framework 2.0
我在自定义对象上使用Delete
方法和ObjectDataSource
时遇到问题。 Select
,Insert
和Update
方法运行正常。
这是类的代码:
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>
当我尝试删除一个Item并对方法Delete
执行调试时,它具有如下参数deletedCar
:
ID = 0 描述=空
但是当我对Update
或Insert
方法执行调试时,Car
对象正确填充了正确的数据。
发生了什么事?
答案 0 :(得分:8)
在DetailsView中设置DataKeyNames(主键属性)。
<asp:DetailsView DataKeyNames="ID" />