DropBownList VB.NET не работает с событием SelectIndexChanged внутри UpdatePanel и нижнего колонтитула Gridview. - PullRequest
0 голосов
/ 01 октября 2018

Я искал этот ответ везде без решения моей проблемы.У меня есть сетка с выпадающим списком и текстовыми полями в нижнем колонтитуле, каждый раз, когда я нажимаю кнопку «добавить», значения этих элементов управления вставляются в сетку.

У меня проблема с выпадающим списком selectedindexcessed событие не работает.Я хочу каждый раз, когда я изменяю опцию выпадающего меню, значения текстовых полей заполняются некоторыми значениями.

У меня есть поиск по всей сети, и я сделал все

  1. Autopostback = true
  2. Enableviewstate = true (раскрывающиеся страницы, страница, главная страница)
  3. ViewStateEnabled = Включено
  4. Установить триггеры asynctriggers в панели обновлений, используя код, лежащий в основе
  5. Если не ispostback взагрузка страницы для привязки данных

IMAGE.JPG Это мое представление сетки с раскрывающимся списком и текстовыми полями, которые я хочу заполнить

IMAGE.JPGOnselectedindexchange работает только один раз, если я нажимаю кнопку de add

Это мой HTML-код

<script runat="server">


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

        Dim control As Control = Nothing
        If grid1.FooterRow IsNot Nothing Then
            control = grid1.FooterRow
        Else
            control = grid1.Controls(0).Controls(0)
        End If


        Dim descripcion As String
        descripcion = "funciona"


        CType(control.FindControl("descfac"), HtmlInputText).Value = descripcion



    End Sub


    Protected Sub Add(ByVal sender As Object, ByVal e As EventArgs)

        Dim control As Control = Nothing
        If grid1.FooterRow IsNot Nothing Then
            control = grid1.FooterRow
        Else
            control = grid1.Controls(0).Controls(0)
        End If


        Dim producto As String = CType(control.FindControl("Producto"), DropDownList).Text


        Dim dt As System.Data.DataTable = TryCast(ViewState("Factura"), System.Data.DataTable)
        dt.Rows.Add(producto, "testitem", "testitem", "testitem", "testitem")
        grid1.DataSource = dt
        grid1.DataBind()
        ViewState("Factura") = dt





    End Sub



</script>





                <asp:ScriptManager ID="ScriptManager1"  runat="server"></asp:ScriptManager>

                <asp:UpdatePanel ID="udp1"  updatemode="Always"  runat="server">
                    <ContentTemplate>
<asp:GridView ID="grid1" runat="server"  AutoGenerateColumns="false" ShowFooter="true" class="table table-hover">




                                        <Columns>
                                            <asp:TemplateField HeaderText="Producto">
                                                <ItemTemplate>
                                                    <%# Eval("Producto") %>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <asp:DropDownList class="form-control select" runat="server" ID="producto"
                                                        data-live-search="true" AutoPostBack="true" ViewStateMode="Enabled" OnSelectedIndexChanged="producto_SelectedIndexChanged"  EnableViewState="true">

                                                        <asp:ListItem>P00000050 - Zapatos de Mujer </asp:ListItem>
                                                        <asp:ListItem>P00000051 - Correa de Hombre</asp:ListItem>
                                                        <asp:ListItem>P00000052 - Camisa de niña</asp:ListItem>
                                                    </asp:DropDownList>



                                                </FooterTemplate>
                                            </asp:TemplateField>
                                            <asp:TemplateField HeaderText="Descripción">
                                                <ItemTemplate>
                                                    <%# Eval("Descripcion") %>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <input type="text" class="form-control" runat="server" id="descfac" placeholder="" />
                                                </FooterTemplate>
                                            </asp:TemplateField>
                                            <asp:TemplateField HeaderText="Cantidad">
                                                <ItemTemplate>
                                                    <%# Eval("Cantidad") %>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <input type="text" class="form-control" runat="server" id="cantext" placeholder="" />
                                                </FooterTemplate>
                                            </asp:TemplateField>

                                            <asp:TemplateField HeaderText="Precio Unitario">
                                                <ItemTemplate>
                                                    <%# Eval("Unitario") %>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <input type="text" class="form-control" runat="server" id="preunit" placeholder="" />
                                                </FooterTemplate>
                                            </asp:TemplateField>


                                            <asp:TemplateField HeaderText="Total">
                                                <ItemTemplate>
                                                    <%# Eval("Total") %>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <input type="text" class="form-control" runat="server" id="detotal" placeholder="" disabled />
                                                </FooterTemplate>
                                            </asp:TemplateField>


                                            <asp:TemplateField>
                                                <ItemTemplate>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" class="btn btn-primary pull-left" CommandName="Footer" />
                                                </FooterTemplate>
                                            </asp:TemplateField>
                                        </Columns>

                                        <EmptyDataTemplate>
                                            <tr class="table table-hover">
                                                <th scope="col">Producto
                                                </th>
                                                <th scope="col">Descripción
                                                </th>
                                                <th scope="col">Cantidad
                                                </th>
                                                <th scope="col">Precio Unitario
                                                </th>

                                                <th scope="col">Total
                                                </th>


                                                <th scope="col"></th>
                                            </tr>
                                            <tr>
                                                <td>
                                                     <asp:DropDownList class="form-control select" runat="server" ID="producto" 
                                                         data-live-search="true" AutoPostBack="true" ViewStateMode="Enabled"   EnableViewState="true"  OnSelectedIndexChanged="producto_SelectedIndexChanged">

                                                        <asp:ListItem>P00000050 - Zapatos de Mujer </asp:ListItem>
                                                        <asp:ListItem>P00000051 - Correa de Hombre</asp:ListItem>
                                                        <asp:ListItem>P00000052 - Camisa de niña</asp:ListItem>
                                                    </asp:DropDownList>

                                                </td>
                                                <td>
                                                    <input type="text" class="form-control" runat="server" id="descfac" placeholder="" />
                                                </td>

                                                <td>
                                                    <input type="text" class="form-control" runat="server" id="cantext" placeholder="" />

                                                </td>

                                                <td>
                                                    <input type="text" class="form-control" runat="server" id="preunit" placeholder="" />
                                                </td>

                                                <td>
                                                    <input type="text" class="form-control" runat="server" id="detotal" placeholder="" disabled />
                                                </td>
                                                <td>
                                                    <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" class="btn btn-primary pull-left" CommandName="EmptyDataTemplate" />
                                                </td>

                                            </tr>
                                        </EmptyDataTemplate>


                                    </asp:GridView>

       </ContentTemplate>

                </asp:UpdatePanel>

мой код

Импортирует System.Data

Открытый класс FacturaCliente Наследует System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


    If Not IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn(4) {New DataColumn("Producto"), New DataColumn("Descripcion"),
                            New DataColumn("Cantidad"), New DataColumn("Unitario"), New DataColumn("Total")})

        grid1.DataSource = dt
        grid1.DataBind()
        ViewState("Factura") = dt



    End If

    Dim control As Control = Nothing
    If grid1.FooterRow IsNot Nothing Then
        control = grid1.FooterRow
    Else
        control = grid1.Controls(0).Controls(0)
    End If



    Dim trig2 As AsyncPostBackTrigger = New AsyncPostBackTrigger()
    trig2.ControlID = CType(control.FindControl("Producto"), DropDownList).UniqueID
    trig2.EventName = "SelectedIndexChanged"
    udp1.Triggers.Add(trig2)

    ScriptManager1.RegisterAsyncPostBackControl(CType(control.FindControl("Producto"), DropDownList))

End Sub

Конечный класс

ОБНОВЛЕНИЕ

Теперь я знаю, почему событие сработало после нажатия кнопки bУттон "добавить".Существует 2 DDL, первый из которых находится в теге emptydatatemplate, а второй - в нижнем колонтитуле gridview, который появляется после первой строки, созданной в gridview.

Теперь ddl в нижнем колонтитуле работает просто отлично, используя scriptmanager1.registerasynpostbackcontrol в событии строки _databound строки gridview.

Проблема все еще остается в ddl внутри тега EmptyDataTemplate.Я пытаюсь найти, как активировать SelectedIndexChanged в этом DDL, если у вас есть какие-либо подсказки, дайте мне знать.

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