Как вставить функцию обратного вызова в функцию OnInit? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть столбец gridview, который содержит кликабельную строку.при щелчке по строке появится всплывающее окно сетки.Например: когда я нажимаю на строку, всплывающее окно сетки отображается в соответствии с идентификатором.** идентификатор кошки в строке - всплывающее окно сетки для идентификатора кошки **

Мой код работает для отображения всплывающего окна сетки для всех идентификаторов, но когда я вставляю clientideevent, нажмите asp.net, как показано ниже, тогда всплывающее окно сетки не отображаетсявсплывающее окно, и когда я вставляю функцию обратного вызова в ASPxHyperlink_Init, как это

link.ClientSideEvents.Click = String.Format("function(s, e) {{ OnMoreInfoClick('{0}');UpdateSplitGrid.PerformCallback(""" & Eval("LotID").ToString & """); }}", sno)

, то эта ошибка показала

System.InvalidOperationException: Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

Мой код какниже:

ASP.NET Mark Up

   function OnMoreInfoClick(contentUrl) {

                popupControl.Show();

            }

   <dx:GridViewDataTextColumn  VisibleIndex="8" Caption="Detail" EditFormSettings-Visible="False" >
                                     <DataItemTemplate>
                                        <dx:ASPxHyperLink ID="ASPxHyperLink" runat="server" OnInit="ASPxHyperLink_Init" >
                                            <ClientSideEvents Click= '<%# "function(s,e) { UpdateSplitGrid.PerformCallback(""" & Eval("LotID").ToString & """); }" %>'></ClientSideEvents>
                                        </dx:ASPxHyperLink>
                                     </DataItemTemplate>
                                    </dx:GridViewDataTextColumn>

VB.NET

    Protected Sub ASPxHyperLink_Init(sender As Object, e As EventArgs)

        Dim link As ASPxHyperLink = CType(sender, ASPxHyperLink)

        Dim templateContainer As GridViewDataItemTemplateContainer = CType(link.NamingContainer, GridViewDataItemTemplateContainer)

        Dim rowVisibleIndex As Integer = templateContainer.VisibleIndex
        Dim sno As String = templateContainer.Grid.GetRowValues(rowVisibleIndex, "sno").ToString()
        Dim SplitTable As String = templateContainer.Grid.GetRowValues(rowVisibleIndex, "Detail").ToString()
        ' Dim contentUrl As String = String.Format("{0}?sno={1}", sno)

        link.Text = "Split Table"

        link.NavigateUrl = "javascript:void(0);"

        link.ClientSideEvents.Click = String.Format("function(s, e) {{ OnMoreInfoClick('{0}');}}", sno)

    End Sub



   Protected Sub UpdateSplitGrid_CustomCallback(sender As Object, e As ASPxGridViewCustomCallbackEventArgs)

        Dim mssql_string As String = "Data Source=xx;Initial Catalog=xx;User Id=xx;Password=xx;Provider=SQLNCLI10"
        Dim con As New OleDbConnection(mssql_string)
        Dim dt1 As New DataTable
        Dim xdapter As New OleDbDataAdapter

        con.Open()

        Dim cmd As New OleDbCommand("select * from PTHOME.dbo.SplitTable where LotID = '" + e.Parameters + "'", con)

        xdapter.SelectCommand = cmd

        xdapter.Fill(dt1)

        con.Close()

        UpdateSplitGrid.DataSource = dt1
        UpdateSplitGrid.DataBind()

    End Sub

Пожалуйста, помогите мне, спасибо заранее.

1 Ответ

0 голосов
/ 26 сентября 2018

Эта строка кода выдает InvalidOperationException, потому что Click клиентское событие не поддерживает привязку данных, ни с Bind(), ни с Eval():

<ClientSideEvents Click= '<%# "function(s,e) { UpdateSplitGrid.PerformCallback(""" & Eval("LotID").ToString & """); }" %>'></ClientSideEvents>

Однако, насколькоЯ знаю, вы можете создать метод, который принимает гиперссылку как GridViewDataItemTemplateContainer и помещает туда индекс:

Protected Function GetRowIndex(ByVal link As DevExpress.Web.ASPxHyperLink) As Integer
    Return (TryCast(link.NamingContainer, DevExpress.Web.GridViewDataItemTemplateContainer)).VisibleIndex
End Function

Затем вы можете использовать его в событии Click для клиентской стороны, как в примере ниже:

<ClientSideEvents Click='<%# "function(s,e) { UpdateSplitGrid.PerformCallback(""" & GetRowIndex(Container).ToString & """); }" %>'>
</ClientSideEvents>

Дополнительное примечание:

Внутри CustomCallback обработчик событий, если вы хотите получить определенное значение строки на основе имени его столбца, используйте следующую строку:

Dim row As Object = UpdateSplitGrid.GetRowValues(Convert.ToInt32(e.Parameters), "LotID");

Затем вы можете сделать что-то с предоставленным значением (обратите внимание, что для вставки значений запроса используется SqlParameter вместо конкатенации строк).

Аналогичная проблема (при использовании ASPxMenu вместо ASPxHyperLink):

ASPxGridView - Как передать параметр в метод PerformCallback из выражения разметки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...