6

我意识到您可以通过在 aspx 页面上添加其属性(即 onclick="Button_Click")以声明方式将事件处理程序分配给 formview 内的子控件,但如果我想以编程方式执行此操作,我将如何处理呢?该控件不会通过页面的 Init 或 Load 事件中的 FormView.FindControl 找到,因此无法在这些阶段分配它。FormView 的 DataBound 事件将允许您找到控件,但不合适,因为这只发生一次,然后该事件不会总是被绑定,也不会触发。我不是在问,因为我无法绕过它,我只是想知道如何做到这一点。

干杯。

4

4 回答 4

2

您应该使用 FormView 的 ItemCreated 事件。它发生在创建所有行之后,但在 FormView 绑定到数据之前。

查看此 MSDN 页面以获取更多信息

于 2009-12-20T01:10:26.117 回答
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 回答
1

你试过预渲染吗?我认为为时已晚,但很惊讶它不在您的帖子中。

我觉得很奇怪你会添加一个你希望立即触发的事件。在这种情况下,为什么不直接调用处理程序或函数。

于 2009-12-18T21:27:06.357 回答
1

在 c# 中,这是通过以下方式完成的:
this.btnProcess.Click += new EventHandler(btnProcess_Click);

于 2009-12-18T18:55:04.993 回答