首页 > 解决方案 > 在 Gridview 中创建文本框并添加事件处理程序

问题描述

我正在尝试在我的 gridview 中添加一个“超级标题”行。看来我只能在代码隐藏中做到这一点。在标题中,我想添加一个文本框并附加一个 textchange 事件处理程序。但是,虽然代码生成标题行和文本框,但它似乎没有附加事件处理程序。这是我的代码:

Protected Sub GridViewBegroting_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles testGrid.DataBound
    Dim myGridView As GridView = sender
    If myGridView.Controls.Count > 0 Then
        AddSuperHeader(myGridView)
    End If
End Sub

Protected Sub AddSuperHeader(ByVal gridView As GridView)
    Dim myTable As Table = gridView.Controls(0)
    Dim cell As TableHeaderCell = MakeCell("Search", 4)
    Dim tb As HtmlGenericControl = MakeTextBox()
    Dim myNewRow As GridViewRow = New GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal)
    cell.Controls.Add(tb)
    myNewRow.Cells.Add(cell)
    myTable.Rows.AddAt(0, myNewRow)
End Sub

Protected Function MakeTextBox() As HtmlGenericControl
    Dim div1 As HtmlGenericControl = New HtmlGenericControl("div")
    Dim span1 As HtmlGenericControl = New HtmlGenericControl("span")
    Dim tb As TextBox = New TextBox

    AddHandler tb.TextChanged, AddressOf TestGridView_Search
    tb.ID = "testSearchTextBox"
    tb.Attributes("placeholder") = "Search Term"
    div1.Controls.Add(span1)
    div1.Controls.Add(tb)

    Return div1
End Function

Protected Function MakeCell(Optional ByVal text As String = "", Optional ByVal span As Int32 = 1) As TableHeaderCell

    Dim header As New TableHeaderCell()
    header.ColumnSpan = span
    header.Text = text
    header.CssClass = "table-header"
    Return (header)
End Function

Protected Sub TestGridView_Search(ByVal sender As Object, ByVal e As EventArgs)        
        Dim i As Integer = 0        
End Sub

这会创建所有正确的控件,但不会触发事件。没有错误,但 TestGridView_Search 上的断点不会触发。此外,这是一个用户控件 (ASCX)。我已经尝试通过附加一个 javascript ajax 函数来做到这一点,但这似乎不适用于 ASCX 文件。

标签: asp.netvb.netascx

解决方案


ASP.NET 就是绑定到 .NET 框架的标准 HTML 网页。服务器正在处理您的代码。无论您编写什么代码,都需要用 js(inlc.jquery)和 html 编写。好吧,当我们使用 Visual Studio 在 ASP.NET 中编写代码时,我们看不到任何 js 或 html,除了我们在 .aspx 或代码隐藏文件中编写的内容。也就是说,因为服务器会处理我们编写的内容,并将必要的 js 和 html 添加到输出流中,然后发送到请求该页面的客户端。知道了,我们如何实现事件处理的思想或者一些html和js原生做不到的东西呢?通过进入通过 js 定义的状态回发到服务器。示例:当我们单击文本框文本并对其进行更改时,我们需要回发到服务器。从 asp 服务器编写的 js 和 html 为我们完成了所有这些工作。我们不必为此担心。我们只需要记住它的作用。默认情况下,文本框控件确实将回发设置为 false。因为,每当用户对其进行操作时,该页面的 js 都会进行回发。当我们不希望这样时,这不是一个好的用户体验。在您的情况下,这正是我们想要的。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。

例子:

textbox.AutoPostBack = True

问候,

马赫什瓦拉


推荐阅读