Привет, у меня есть эти три 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 обновляется при изменении выбранного индекса из таблицы.