2017-10-07 1 views
1

Je n'ai trouvé aucune solution de mon problème:événement GridView PageIndexChanging ne se déclenche pas à l'intérieur UpdatePanel

événement d'appel GridView gvBanquet_PageIndexChanging ne se déclenche pas quand il est à l'intérieur d'un UpdatePanel.

code problème est ici:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 

    <div class="col-lg-12 table-responsive"> 
    <asp:GridView ID="gvBanquet" runat="server" AutoGenerateColumns="false" 
     OnRowCommand="gvBanquet_RowCommand" AllowPaging="True" PageSize="5" 
     EmptyDataText="No record found!" OnPageIndexChanging="gvBanquet_PageIndexChanging" 
     ShowHeaderWhenEmpty="true"> 
     <Columns> 

     // here are templates 

     </Columns> 
     <PagerStyle CssClass="pagination-ys" /> 
    </asp:GridView> 

    </div> 
    <!-- /.col-lg-12 --> 

    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="gvBanquet" EventName="PageIndexChanging" /> 
    </Triggers> 
</asp:UpdatePanel> 

Et voici un événement d'appel:

protected void gvBanquet_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvBanquet.PageIndex = e.NewPageIndex; 

    // fill and bind gridview here 
} 

J'ai ajouté un point de rupture, mais son tir ne.

enter image description here

Comment puis-je tirer des boutons d'appel?

enter image description here

+0

montrez votre code 'getdata' – Webruster

+0

@Webruster J'ai modifié ma question. – AsifAli72090

+0

Code 'DLBqt.SelectBanquet'? – Webruster

Répondre

0

L'un des cas possible sans voir votre code getdata est que:

vous devriez lire l'ensemble de données (votre cas Datatable) qui a été utilisé pour charger le gridview, chaque fois que votre index de page est changé. De cette façon, vous pouvez vous assurer que dans chaque publication séparée qui a été déclenchée par le numéro de page gridview, les résultats seront renseignés.

Mise à jour

Essayez d'ajouter un déclencheur

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="gvBanquet" EventName="PageIndexChanging" /> 
</Triggers> 
+0

Il ne semble pas au travail :( – AsifAli72090

+0

@ Asif.Ali s'il vous plaît mettre à jour votre question, après la mise à jour – Webruster

+0

'asp: GridView' n'a pas la propriété' AutoPostBack' –

3

Il n'y a pas de méthode de liaison de la GridView donc je propose deux méthodes (les deux ouvrages)
Méthode 1: liaison déclarative avec SqlDataSource:

<form id="form1" runat="server"> 
    <%--ScriptManager required by UpdatePanel --%> 
    <asp:ScriptManager runat="server" ID="sm" /> 
<div> 
    <asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
    <asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="False" AllowPaging="true" PageSize="5" DataKeyNames="ProductID" DataSourceID="sqlNWind"> 
     <Columns> 
      <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" /> 
      <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> 
      <asp:TemplateField HeaderText="CategoryName" SortExpression="CategoryName"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
    <%--Triggers are redundant because GridView is inside the UpdatePanel --%> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:SqlDataSource ID="sqlNWind" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindCnn %>" 
     SelectCommand="SELECT Products.ProductID, Products.ProductName, Products.CategoryID, Categories.CategoryName FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID"> 
    </asp:SqlDataSource> 
</div> 
</form> 

Aucun code derrière requis.

Méthode 2: Reliure du code Derrière:

.aspx 
<form id="form1" runat="server"> 
    <asp:ScriptManager runat="server" ID="sm" /> 
<div> 
    <asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
    <asp:GridView ID="gvProducts" runat="server" OnPageIndexChanging="gvProducts_PageIndexChanging" AutoGenerateColumns="False" AllowPaging="true" PageSize="5" DataKeyNames="ProductID"> 
     <Columns> 
      <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> 
      <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> 
      <asp:TemplateField HeaderText="CategoryName" SortExpression="CategoryName"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
</form> 

.aspx.vb 

Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     BindProds()''//Bind initial 
    End If 
End Sub 
Protected Sub gvProducts_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) 
    gvProducts.PageIndex = e.NewPageIndex 
    BindProds()''//Bind when pageIndex changing 
End Sub 

Private Sub BindProds() 
    Using cnn As New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("NorthwindCnn").ConnectionString) 
     Using cmd As New Data.SqlClient.SqlCommand("SELECT Products.ProductID, Products.ProductName, Products.CategoryID, Categories.CategoryName FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID", cnn) 
      Dim da As New Data.SqlClient.SqlDataAdapter(cmd) 
      Dim dt As New Data.DataTable() 
      da.Fill(dt) 
      da.Dispose() 
      gvProducts.DataSource = dt 
      gvProducts.DataBind() 
     End Using 
    End Using 
End Sub 

Le code est VB.NET. J'espère que OP peut le traduire en C#.