在使用FormView / ObjectDataSource控件插入后,如何获取插入的id(或对象)?

时间:2010-02-22 15:38:29

标签: asp.net objectdatasource formview

我有一系列松散地符合以下模式的类:

public class CustomerInfo {
    public int Id {get; set;}
    public string Name {get; set;}
}

public class CustomerTable {
    public bool Insert(CustomerInfo info) { /*...*/ }
    public bool Update(CustomerInfo info) { /*...*/ }
    public CustomerInfo Get(int id) { /*...*/ }
    /*...*/
}

成功插入后,Insert方法将设置传入的CustomerInfo对象的Id属性。我在几个地方使用过这些类,并且更愿意改变它们。 现在我正在尝试编写用于插入和更新记录的ASP.NET页面。 我目前正在使用ObjectDataSource和FormView控件:

<asp:ObjectDataSource 
    TypeName="CustomerTable"
    DataObjectTypeName="CustomerInfo"
    InsertMethod="Insert"
    UpdateMethod="Update"
    SelectMethod="Get"
/>

我可以成功插入和更新记录。我想在成功插入后将FormView的模式从Insert切换到Edit。 我的第一次尝试是在ItemInserted事件中切换模式。

这当然没有用。我正在使用QueryStringParameter作为id,当然在插入时不会设置。

因此,我在ObjectDataSource的Selecting事件期间切换到手动填充InputParameters。这个问题是我需要知道新插入的记录的id,我找不到一个好方法。

我知道我可以访问Insert方法的返回值,并且在ItemInserted事件中输出参数当然我的方法不会使用任何这些方法返回id。我无论如何都无法访问插入完成后插入的id或CustomerInfo对象。

我能做的最好的事情是将CustomerInfo对象保存在ObjectDataSource的Inserting事件中。

这感觉就像是一种奇怪的方式。我认为必须有一个更好的方法来做到这一点,当我看到它时我会踢自己。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果需要在objectdatasource上检索调用的insert方法的返回值,请使用“Inserted”事件,如下所示:

 protected void ObjDS_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
 {
    int retvalue = Convert.ToInt32(e.ReturnValue);
 }

无需参数来捕获返回值。对于Update方法,请使用“Updated”