5

ユーザーが複数のレコードを入力/編集できるasp.netページを開発しています。Repeater コントロールを使用して、各レコードの入力フィールドを表示しています。クリックすると、新しい空白の入力フィールドのセットを挿入する「追加」ボタンが必要です。ユーザーは新しいレコードを入力し、追加ボタンを複数回クリックして、新しいレコードの追加を続行できる必要があります。次に、ユーザーが [保存] ボタンをクリックすると、それらの新しいレコードが既存のレコードへの変更と共に保存されます。ユーザーが [保存] をクリックしない場合、レコードは破棄され、データベースに書き込まれません。

Repeater コントロールでこの「追加」機能を実装する方法はありますか?

4

1 に答える 1

1

これにはかなり簡単な解決策があります。ユーザーが入力したデータを一時的に保持する何らかの形式の View Model があると仮定すると、リピーターがデータソースとして使用するコレクションに「空白の」ViewModel を追加するだけです。保存時に、View Model に存在するデータベースへのすべての変更を簡単に保存できます。考えられる例は次のとおりです。

    protected void btnAdd_OnCommand(object sender, EventArgs e)
    {
        List<Item> items = (List<Item>)this.ItemRepeater.DataSource;
        items.Add(new Item() { Id = -1 });
        this.ItemRepeater.DataBind();
    }

    protected void btnSave_OnCommand(object sender, EventArgs e)
    {
        List<Item> items = (List<Item>)this.ItemRepeater.DataSource;

        foreach (Item itm in items)
        {
            if (itm.Id == -1)
            {
                //Save New Item
            }
            else
            {
                //Update existing item
            }
        }
    }

ここでの主な注意点は、ユーザーが行った変更 (保持/表示したい) で更新された View Models を使用して、ItemRepeater のデータソースを再設定する必要があることです。

于 2012-07-12T14:58:38.330 に答える