1

私が探しているのは、asp.net 内で MS-Access スタイルの連続フォームを模倣する方法です。ある特定のケースでは、データソース内の値にバインドされた、各行のドロップダウンリストを返すデータソースにバインドされたコントロールが必要です。ドロップダウンリストのいずれかを変更すると、データベースが即座に更新されます。

Repeater.ItemDataBound イベント内で DropDownList.SelectedValue が割り当てられたリピーター コントロールを使用して、これを達成するための途中まで来ました。

しかし、ここで、OnSelectedIndexChanged イベントを DropDownList に追加するとします。どの行にいるのかを知るためにリピーターにクエリを実行するにはどうすればよいでしょうか (たとえば、主キーの値を取得するため)。

これが簡単にできるかどうかはわかりません..だから問題は、私が本当に何をすべきかということです? 編集する行を選択する必要がある GridView を使用したくありません。更新のためにドロップダウンリストを自動ポストバックしたいだけです。

それが明らかであることを願っていますか?

乾杯!:D

4

2 に答える 2

0

これに取り組む最も簡単な方法は、Accessの連続形式のASP.NETスタイルを模倣することです。これは、行レベルのUIを処理するUserControlを作成し、そのUserControlをリピーターに配置することです。

于 2009-07-07T14:36:50.070 に答える
0

たとえば、次のようなカスタムクラスにバインドしているとします。Record

public class Record
{
    public int Id;
    public string Value;
}

Repeater.OnItemCreatedイベントにカスタムロジックを配置すると、ドロップダウンリストのIDに主キーを付加できます。

protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem))
        return;

    var dataItem = e.Item.DataItem as Record;
    if (dataItem == null) return;

    var dropdown = e.Item.FindControl("myDropDown") as DropDownList;
    if (dropdown == null) return;

    dropdown.ID = dropdown.ID + dataItem.Id;
}

次に、SelectedIndexChangeで、イベントを発生させたドロップダウンからIDを取得できます。

protected void SelectedIndexChanged(object sender, EventArgs e)
{
    var dropdown = sender as DropDownList;
    if (dropdown == null) return;

    var stringId = dropdown.ID.Replace("myDropDown", "");
    int id;
    if (Int32.TryParse(stringId, out id))
    {
        updateRecord(id, dropdown.SelectedValue);
    }
}

それは非常に醜いハックですが、それはあなたがやりたいことをすることを可能にするはずです。

于 2009-07-07T14:28:44.593 に答える