6

aspx ページ (つまり onclick="Button_Click") に属性を追加することで、formview 内の子コントロールにイベント ハンドラーを宣言的に割り当てることができますが、プログラムでこれを行うにはどうすればよいでしょうか。そのコントロールは、Page の Init または Load イベントで FormView.FindControl を介して検出されないため、これらの段階で割り当てることはできません。FormView の DataBound イベントを使用すると、コントロールを見つけることができますが、不適切です。これは一度しか発生せず、イベントが常にバインドされるとは限らず、発生しないためです。私はそれを回避できないので尋ねているのではなく、それがどのように行われるかを知りたかっただけです。

乾杯。

4

4 に答える 4

2

FormViewのItemCreatedイベントを使用する必要があります。これは、すべての行が作成された後、FormViewがデータにバインドされる前に発生します。

詳細については、このMSDNページを参照してください

于 2009-12-20T01:10:26.117 に答える
1

PreRender を試しましたか? 手遅れだと思いますが、あなたの投稿にそれがなかったことに驚いています。

すぐに発生すると予想されるイベントを追加するのは奇妙だと思います。その場合、ハンドラーまたは関数を呼び出すだけではどうですか。

于 2009-12-18T21:27:06.357 に答える
1

c# では、これは次の方法で実現されます。
this.btnProcess.Click += new EventHandler(btnProcess_Click);

于 2009-12-18T18:55:04.993 に答える
1

多分私は何かが足りない!代わりにイベント バブリングを使用できます。ただし、FormView コントロールには、子コントロールのイベントを処理するイベントがありません。それで、いくつかの変更があります。

[System.Web.UI.ToolboxData("<{0}:FormView runat=\"server\" />")]
public class FormView : System.Web.UI.WebControls.FormView
{

    private static readonly object _itemClickEvent = new object();

    [System.ComponentModel.Category("Action")]
    public event EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> ItemClick
    {
        add { base.Events.AddHandler(_itemClickEvent, value); }
        remove { base.Events.RemoveHandler(_itemClickEvent, value); }
    }

    protected virtual void OnItemClick(System.Web.UI.WebControls.FormViewCommandEventArgs e)
    {
        EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> handler = base.Events[_itemClickEvent] as EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs>;
        if (handler != null) handler(this, e);
    }

    protected override bool OnBubbleEvent(object source, EventArgs e)
    {
        this.OnItemClick((System.Web.UI.WebControls.FormViewCommandEventArgs)e);
        return base.OnBubbleEvent(source, e);
    }

}

上記のコード スニペットはItemClick、FormView コントロールにイベントを追加して、子コントロールのイベントを処理する方法を示しています。ここで、代わりに新しい FormView コントロールをマップまたはドラッグする必要があります。

于 2009-12-20T07:29:54.530 に答える