【问题标题】:.net development dynamically created controls need their own methods.net开发动态创建的控件需要自己的方法
【发布时间】:2009-02-04 23:50:26
【问题描述】:

我敢肯定,几乎每个使用 .net 编程的人都在动态创建按钮时遇到过类似的问题。

示例场景..

我有一个 gridview 并且在其中一个 gridview 字段中我有一个按钮。通常在 .net 中使用 Visual Studio,您可以轻松获取按钮的单击事件,但是由于这些按钮是动态创建的,因此它们并不容易获取。我很好奇获取按钮点击事件的最佳方法是什么。

我了解使用 dopostback 是可能的;但是,我不确定如何实现它,也没有尝试过,因为我也读过 dopostback 方法不是一个很好用的方法。这是为什么呢?

【问题讨论】:

    标签: asp.net javascript code-behind server-side


    【解决方案1】:

    在gridview 中有一个名为RowDatabound 的事件。在上面放置一个事件处理程序:

    gv.RowDataBound += new EventHandler(rowBound);
    

    现在在该函数中,您将使用 FindControl 来定位按钮并添加一个处理程序:

    function rowbound(Object sender, GridViewRowEventArgs e)
    {
      if(e.Row.RowType == DataControlRowType.DataRow)
      {
          var b = e.Row.FindControl("btn") as Button;
          b.Click += new EventHandler(handleBtnClick);
      }
    }
    

    【讨论】:

    • 我认为 goodwince 是在询问如何将事件处理程序设置为 gridview 中动态创建的控件。 cmsjr 的回答似乎更合适。
    【解决方案2】:

    在 Gridview 的 ItemCreated 事件期间,使用 FindControl 获取对按钮的引用并在此处附加事件处理程序。 IE。 btn.Click += Somehandler;

    【讨论】:

      【解决方案3】:

      可悲的是,答案比我想象的要简单得多..

      我没有意识到 ItemCommand 事件可用于在 TemplateField 中创建的按钮。

      我真正要做的就是......

      Private Sub GridView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewCommandEventArgs) Handles DetailsView1.ItemCommand
          If e.CommandName = "myButton" Then
              //'myButton press event logic here
          End If
      End Sub
      

      感谢你们的帮助。我真的很感激。我敢肯定,您的回答会对未来有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多