#asp.net #gridview #drop-down-menu
#asp.net #gridview #выпадающее меню
Вопрос:
У меня есть два выпадающих списка и gridview (lstDivisions, lstDistricts, gridIncidents) в asp.net страница и я использую инструкции SqlDataSource ID на странице ASPX для извлечения данных с SQL Server для всех трех элементов управления.
Все элементы управления загружаются правильно, и когда я выбираю другое значение во втором выпадающем списке, gridview заполняется, как и ожидалось.
Когда я выбираю новое значение подразделения в первом выпадающем списке, второй выпадающий список заполняется должным образом, НО gridview не обновляется, ПОКА я не выберу новое значение района из второго выпадающего списка.
Какой метод мне использовать для обновления gridview?
Спасибо
Код со страницы aspx:
<asp:SqlDataSource ID="sourceIncidents" runat="server" ProviderName="System.Data.SqlClient"
ConnectionString="<%$ ConnectionStrings:DB1Connection %>"
SelectCommand="SELECT incidentnumber, call_date, call_time, address , call_type, district FROM Incident ORDER BY create_date"
FilterExpression="District='{0}'" EnableCaching="True">
<FilterParameters>
<asp:ControlParameter ControlID="lstDistricts" Name="district" PropertyName="SelectedValue" />
</FilterParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sourceIncidentDistricts" runat="server"
ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:DB2Connection %>"
SelectCommand="SELECT DivisionName, DistrictName as District FROM Divisions LEFT JOIN Districts ON Districts.DivisionID = Divisions.DivisionID"
FilterExpression="DivisionName ='{0}'" EnableCaching="True">
<FilterParameters>
<asp:ControlParameter ControlID="lstDivisions" Name="DivisionName" PropertyName="SelectedValue" />
</FilterParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sourceIncidentDivisions" runat="server"
ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:DB2Connection %>"
SelectCommand="SELECT DISTINCT DivisionName FROM Divisions" EnableCaching="True">
</asp:SqlDataSource>
<br />
<asp:Label ID="lblDivision" runat="server" Text="Division"></asp:Label>
<asp:DropDownList ID="lstDivisions" runat="server" DataSourceID="sourceIncidentDivisions"
DataValueField="DivisionName" OnSelectedIndexChanged="GetDivisions_SelectedIndexChanged"
DataTextField="DivisionName" Width="205px" AutoPostBack="True">
</asp:DropDownList>
amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;
<asp:Label ID="lblDistrict" runat="server" Text="District"></asp:Label>
<asp:DropDownList ID="lstDistricts" runat="server" DataSourceID="sourceIncidentDistricts"
DataValueField="District" OnSelectedIndexChanged="GetDistricts_SelectedIndexChanged"
DataTextField="District" Width="205px" AutoPostBack="True">
</asp:DropDownList><br />
<br />
<asp:Label ID="lblIncidentsCaption" runat="server" Font-Bold="True" Font-Names="Verdana"
Font-Size="Small"></asp:Label>
<br />
<asp:GridView ID="gridIncidents" runat="server" CellPadding="3" DataSourceID="sourceIncidents"
Font-Names="Verdana" Font-Size="Small"
OnSelectedIndexChanged="gridIncidents_SelectedIndexChanged"
GridLines="Horizontal" AutoGenerateColumns="False" DataKeyNames="incidentnumber"
AllowPaging="True" AllowSorting="True" BackColor="White" BorderColor="#4A3C8C"
BorderStyle="None" BorderWidth="1px"
PagerSettings-Mode="NumericFirstLast" PagerSettings-Position="TopAndBottom" >
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<HeaderStyle BackColor="#4B6C9E" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" />
<Columns>
<asp:CommandField SelectText=">" ShowSelectButton="True" />
<asp:TemplateField HeaderText="INCIDENT" SortExpression="incidentnumber">
<ItemTemplate><%# Eval("incidentnumber").ToString() %></ItemTemplate>
<ItemStyle BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="DATE" SortExpression="call_date">
<Itemtemplate><%# Eval("call_date", "{0:MM/dd/yyyy}")%></Itemtemplate>
<ItemStyle BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="TIME" SortExpression="call_time">
<Itemtemplate><%# Eval("call_time") %></Itemtemplate>
<ItemStyle BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="ADDRESS" SortExpression="address">
<Itemtemplate><%# Eval("address") %></Itemtemplate>
<ItemStyle Width="300px" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="CALL TYPE" SortExpression="call_type">
<Itemtemplate><%# Eval("call_type") %></Itemtemplate>
<ItemStyle BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="DISTRICT" SortExpression="district">
<Itemtemplate><%# Eval("district")%></Itemtemplate>
<ItemStyle BorderWidth="1px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
Комментарии:
1. РЕШЕНИЕ: в раскрывающемся списке OnSelectedIndexChanged для «lstDivisions» … добавлено: lstDistricts. Привязка данных ();
Ответ №1:
Спасибо за предоставленный ответ. Это сводило меня с ума в течение 2 дней. Как и у вас, у меня есть несколько связанных выпадающих списков (у меня их три), и я безуспешно пытался исправить эту проблему, подключаясь к различным событиям привязки / загрузки / выгрузки источника данных.
Чтобы полностью решить мою проблему, мне также пришлось отключить viewstate во всех 3 моих выпадающих меню.
Ответ №2:
Я полагаю, что в первом выпадающем списке выбрано событие изменения индекса, вам нужно повторно привязать gridview. GridView.DataBind(); . В любом случае, не могли бы вы опубликовать код, это будет более полезно.
Надеюсь, это поможет
Комментарии:
1. Добавление элементов сетки. Привязка данных(); к GetDivisions_SelectedIndexChanged не привела к обновлению сетки.
Ответ №3:
Gridview должен обновляться каждый раз, когда вы публикуете страницу. Это означает, что если вы разместите на странице тестовую кнопку и добавите событие нажатия на эту кнопку без ввода в нее какого-либо кода, gridview должен ссылаться на нее, потому что произошла обратная передача.
Вы проверили первое выпадающее окно и проверили его свойство обратной передачи. Должно быть изменено на true. Вот так
AutoPostBack= true // ?
Ответ №4:
Решение
В OnSelectedIndexChanged для lstDivisions
выпадающего списка добавлено: lstDistricts.DataBind();