Я искал этот ответ везде без решения моей проблемы.У меня есть сетка с выпадающим списком и текстовыми полями в нижнем колонтитуле, каждый раз, когда я нажимаю кнопку «добавить», значения этих элементов управления вставляются в сетку.
У меня проблема с выпадающим списком selectedindexcessed событие не работает.Я хочу каждый раз, когда я изменяю опцию выпадающего меню, значения текстовых полей заполняются некоторыми значениями.
У меня есть поиск по всей сети, и я сделал все
- Autopostback = true
- Enableviewstate = true (раскрывающиеся страницы, страница, главная страница)
- ViewStateEnabled = Включено
- Установить триггеры asynctriggers в панели обновлений, используя код, лежащий в основе
- Если не 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, если у вас есть какие-либо подсказки, дайте мне знать.