Как получить вставленный идентификатор (или объект) после вставки с помощью элементов управления FormView / ObjectDataSource? - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть серия классов, которые свободно соответствуют следующему шаблону:

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 устанавливает свойство Id объекта CustomerInfo, который был передан. Я использовал эти классы в нескольких местах и ​​предпочел бы изменить их. Сейчас я экспериментирую с написанием страницы ASP.NET для вставки и обновления записей. В настоящее время я использую элементы управления ObjectDataSource и FormView:

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

Я могу успешно вставлять и обновлять записи. Я хотел бы переключить режим FormView с Вставить на Редактировать после успешной вставки. Моей первой попыткой было переключение режима в событии ItemInserted.

Это, конечно, не сработало. Я использовал QueryStringParameter для идентификатора, который, конечно, не будет установлен при вставке.

Итак, я переключился на ручное заполнение InputParameters во время события Selecting ObjectDataSource. Проблема в том, что мне нужно знать идентификатор недавно вставленной записи, которую я не могу найти хорошим способом получить.

Я понимаю, что могу получить доступ к возвращаемому значению метода Insert, и параметры out в событии ItemInserted, конечно, мой метод не возвращает id, используя любой из этих методов. Я не могу найти доступ к идентификатору или объекту CustomerInfo, который был вставлен после завершения вставки.

Лучшее, что я смог сделать, - это сохранить объект CustomerInfo в событии Inserting объекта ObjectDataSource.

Это похоже на странный способ сделать это. Я полагаю, что должен быть лучший способ сделать это, и я пну себя, когда увижу это. Есть идеи?

1 Ответ

0 голосов
/ 03 апреля 2010

Если вам нужно получить возвращаемое значение вызванного метода вставки в источнике данных объекта, используйте событие «Вставлено», например:

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

Параметр не требуется для получения возвращаемого значения. Для метода обновления используйте «Обновлено»

...