0

次のパターンに大まかに適合する一連のクラスがあります。

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 のモードを挿入から編集に切り替えたいと思います。私の最初の試みは、ItemInserted イベントでモードを切り替えることでした。

もちろん、これはうまくいきませんでした。もちろん、挿入時に設定されないIDにQueryStringParameterを使用していました。

そこで、ObjectDataSource の Selecting イベント中に InputParameters を手動で設定することに切り替えました。これに関する問題は、新しく挿入されたレコードの ID を知る必要があることですが、これを取得する良い方法が見つかりません。

Insert メソッドの戻り値にアクセスできること、および ItemInserted イベントの out パラメータにアクセスできることは理解しています。もちろん、私のメソッドはこれらのメソッドのいずれかを使用して ID を返しません。とにかく、挿入が完了した後に挿入された ID または CustomerInfo オブジェクトにアクセスする方法が見つかりません。

私ができる最善の方法は、CustomerInfo オブジェクトを ObjectDataSource の Inserting イベントに保存することです。

これはこれを行う奇妙な方法のように感じます。これを行うためのより良い方法があるに違いないと考えており、それを見ると自分を蹴ります。何か案は?

4

1 に答える 1

0

objectdatasource で呼び出された挿入メソッドの戻り値を取得する必要がある場合は、次のように「Inserted」イベントを使用します。

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

戻り値をキャッチするために必要なパラメーターはありません。Update メソッドには、「Updated」を使用します。

于 2010-04-03T05:47:19.620 に答える