Обновление ASP.NET Gridview с помощью каскадных выпадающих элементов управления - PullRequest
1 голос
/ 09 ноября 2011

У меня есть два раскрывающихся списка и вид сетки (lstDivisions, lstDistricts, gridIncidents) на странице asp.net, и я использую операторы SqlDataSource ID на странице ASPX для извлечения данных из SQL Server для всех трех элементов управления.

Все элементы управления загружаются правильно, и когда я выбираю другое значение во втором раскрывающемся меню, сетка отображается как ожидалось.

Когда я выбираю новое значение деления в первом раскрывающемся списке, второе раскрывающееся меню заполняется правильно, НО сетка не обновляется, пока я не выберу новое значение округа из второго раскрывающегося списка.

Какой метод мне использовать для обновления вида сетки?

Спасибо

Код со страницы 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>

    &nbsp;&nbsp;&nbsp;&nbsp;&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>

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Спасибо, что изложили ответ.Это сводит меня с ума в течение 2 дней.Как и у вас, у меня есть несколько связанных раскрывающихся списков (у меня их три), и я пытался решить эту проблему, безуспешно подключаясь к различным событиям источника данных Bind / Load / Unload.

Чтобы полностью решить мою проблему, япришлось отключить viewstate на всех 3 моих выпадающих.

0 голосов
/ 15 ноября 2011

Вид сетки должен обновляться каждый раз, когда вы публикуете страницу. Это означает, что если вы поместите тестовую кнопку на страницу и добавите к ней событие щелчка, не вставляя в нее никакого кода, то просмотр сетки должен возобновиться, поскольку произошла обратная передача.

Вы отметили первый выпадающий список и отметили его свойство обратной передачи. Это должно быть изменено на истинное. Как это

AutoPostBack= true // ?
0 голосов
/ 17 ноября 2011

Решение

В OnSelectedIndexChanged для lstDivisions DropDownList добавлено: lstDistricts.DataBind();

0 голосов
/ 09 ноября 2011

Я считаю, что в первом выпадающем списке выбранного измененного индекса вам нужно перепривязать сетку.GridView.DataBind ();,В любом случае, вы можете опубликовать код, это будет более полезно.

Надеюсь, это поможет

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