Создать текстовое поле в Gridview и добавить обработчик событий - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь добавить строку "супер заголовок" в мой 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.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Viewstate не знает о вашем динамическом управлении, вам придется его реконструировать:

Источник: https://stackoverflow.com/a/6780138/1821637

Я бы попробовал asp:Repetaer вместо GridView:

https://www.aspsnippets.com/Articles/Repeater-control-Tutorial-with-example-in-ASPNet-using-C-and-VBNet.aspx

0 голосов
/ 16 мая 2018

ASP.NET - это не что иное, как ваша стандартная веб-страница HTML с привязкой к .NET Framework. Сервер обрабатывает ваш код. Что бы вы ни кодировали, нужно писать в js (inlc. Jquery) и html. Что ж, когда мы кодируем в ASP.NET с использованием visual studio, мы не видим ни js, ни html, кроме того, что пишем в .aspx или в файле code code. Это потому, что сервер обрабатывает то, что мы написали, и добавляет необходимые js и html в поток вывода клиенту, запрашивающему эту страницу. Зная это, как мы можем достичь идеи обработки событий или некоторых вещей, которые html и js не могут сделать изначально? Введя состояние, которое было определено с помощью js для обратной передачи на сервер. Пример: когда мы нажимаем на текстовое поле и изменяем его, нам нужно сделать обратную передачу на сервер. Js и html, которые были написаны с сервера asp, делают все это за нас. Нам не нужно беспокоиться об этом. Мы просто должны помнить, что он делает. По умолчанию для элементов управления textbox postback установлен на false. Потому что всякий раз, когда пользователь делает что-то с этим, js этой страницы будет делать обратную передачу. Это не очень хороший пользовательский опыт, когда мы этого не хотим. В вашем случае это именно то, что мы хотим. Таким образом, в нашем коде позади файла (поскольку там создается элемент управления), при объявлении элемента управления мы можем установить для атрибута текстового поля AutoPostBack значение true. Надеемся, это решит вашу проблему.

Пример:

textbox.AutoPostBack = True

С уважением,

Махешвара

...