【问题标题】:ObjectDataSource Delete problemsObjectDataSource 删除问题
【发布时间】:2010-09-24 22:34:14
【问题描述】:

环境:asp.net framework 2.0

我在自定义对象上的Delete 方法和ObjectDataSource 遇到问题。 SelectInsertUpdate 方法工作正常。

这是类的代码:

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

这是ObjectDataSourceDetailsView 的代码:

<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>

当我尝试删除一个项目并对方法Delete进行调试时,它的参数deletedCar是这样的:

ID=0 说明=null

但是当我对UpdateInsert 方法进行调试时,Car 对象会正确填充正确的数据。

发生了什么事?

【问题讨论】:

    标签: asp.net ado.net objectdatasource


    【解决方案1】:

    在 DetailsView 中设置 DataKeyNames(主键属性)。

    <asp:DetailsView DataKeyNames="ID" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多