我正在尝试添加"超级标题"行到我的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文件。
答案 0 :(得分:0)
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将进行回发。当我们不希望这样时,这不是一个好的用户体验。在您的情况下,这正是我们想要的。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明中,我们可以将textbox属性AutoPostBack设置为true。这应该有希望解决你的问题。
示例:
textbox.AutoPostBack = True
此致
Maheshvara
答案 1 :(得分:0)
Viewstate不知道您的动态控件,您必须重新构建它:
来源:https://stackoverflow.com/a/6780138/1821637
我会尝试使用asp:Repetaer
控件而不是GridView
: