проблема с вложенными панелями обновления при вложении трех панелей обновления - PullRequest
0 голосов
/ 14 марта 2020

Привет, у меня есть эти три updatepane1, 2 и 3

Я установил все режимы обновления на условные, а childrenastrigges на false.

первая панель обновления1 имеет вид сетки, когда выбор изменяется updatepanel2 имеет подробное представление, которое отображает информацию о выбранном индексе из сетки в родительском updatepanel1.

, вложенное в updatepanel 2 - это панель обновления 3, которая имеет текстовое поле, отображающее выбранное значение из подробного просмотра в updatepanel2.

ожидаемое поведение: updatepanel1 updatespanpanel2. И таймер в updatepanel3 обновляет updatepanel3. Однако, когда выбор изменяется в updatepanel1, он обновляет и updatepanel2, и 3.

код:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" CodeBehind="UpdatePanel.aspx.vb" Inherits="Template_VB1.UpdatePanel" %>

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
    <ContentTemplate>
        <%=DateTime.Now.ToString %>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [CustomerID], [CustomerFirstName] FROM [Customer]"></asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CustomerID" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" InsertVisible="False" ReadOnly="True" SortExpression="CustomerID" />
                <asp:BoundField DataField="CustomerFirstName" HeaderText="CustomerFirstName" SortExpression="CustomerFirstName" />
            </Columns>
        </asp:GridView>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">

            <ContentTemplate>
                 <%=DateTime.Now.ToString %>

                <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataKeyNames="CustomerID" DataSourceID="SqlDataSource2">
                    <Fields>
                        <asp:BoundField DataField="CustomerFirstName" HeaderText="CustomerFirstName" SortExpression="CustomerFirstName" />
                        <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" InsertVisible="False" ReadOnly="True" SortExpression="CustomerID" />
                        <asp:BoundField DataField="CustomerLastName" HeaderText="CustomerLastName" SortExpression="CustomerLastName" />
                        <asp:BoundField DataField="CustomerCreditLimit" HeaderText="CustomerCreditLimit" SortExpression="CustomerCreditLimit" />
                    </Fields>
                </asp:DetailsView>

                <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [CustomerFirstName], [CustomerID], [CustomerLastName], [CustomerCreditLimit] FROM [Customer]"></asp:SqlDataSource>

                <asp:UpdatePanel ID="UpdatePanel3" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
                    <ContentTemplate>
                         <%=DateTime.Now.ToString %>
                        <asp:Timer ID="Timer1" runat="server" Interval="5000"></asp:Timer>

                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </ContentTemplate>

                </asp:UpdatePanel>
            </ContentTemplate>
        </asp:UpdatePanel>

    </ContentTemplate>


    </asp:UpdatePanel>

код позади :

    Public Class UpdatePanel
    Inherits System.Web.UI.Page

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

    End Sub

    Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged
        DetailsView1.PageIndex = GridView1.SelectedIndex
        UpdatePanel2.Update()
    End Sub

    Protected Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        TextBox1.Text = DetailsView1.SelectedValue
        UpdatePanel3.Update()

    End Sub
End Class

ПРИМЕЧАНИЕ. Текстовое поле работает правильно, оно обновляется только при срабатывании таймера. однако функция datetime.now внутри updatepanel3 обновляется при изменении выбранного индекса из таблицы.

...