我有一個GridView,它使用UpdatePanel內部的自定義分頁(這樣gridview的分頁和排序不會導致回發)。排序工作正常,但分頁不。 PageIndexChanging事件永遠不會被調用。UpdatePanel中GridView的自定義分頁不會觸發PageIndexChanging事件
這是ASPX代碼:
<asp:UpdatePanel runat="server" ID="upSearchResults" ChildrenAsTriggers="true" UpdateMode="Always">
<ContentTemplate>
<asp:GridView ID="gvSearchResults" runat="server" AllowSorting="true" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" OnDataBound="gvSearchResults_DataBound"
OnRowDataBound ="gvSearchResults_RowDataBound" OnSorting="gvSearchResults_Sorting" OnPageIndexChanging="gvSearchResults_PageIndexChanging" Width="100%" EnableSortingAndPagingCallbacks="false">
<Columns>
<asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:HyperLink ID="lnkAdd" runat="server">Add</asp:HyperLink>
<asp:HiddenField ID="hfPersonId" runat="server" Value='<%# Eval("Id") %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="First Name" DataField="FirstName" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="LastName" />
<asp:TemplateField HeaderText="Phone Number" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" >
<ItemTemplate>
<asp:Label ID="lblPhone" runat="server" Text="" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerTemplate>
<table width="100%" class="pager">
<tr>
<td>
</td>
</tr>
</table>
</PagerTemplate>
</asp:GridView>
<div class="btnContainer">
<div class="btn btn-height_small btn-style_dominant">
<asp:LinkButton ID="lbtNewRecord" runat="server" OnClick="lbtNewRecord_Click"><span>Create New Record</span></asp:LinkButton>
</div>
<div class="btn btn-height_small btn-style_subtle">
<a onclick="openParticipantModal();"><span>Cancel</span></a>
</div>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="PageIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="Sorting" />
</Triggers>
</asp:UpdatePanel>
在後面的代碼,我有被稱爲在GridView上OnDataBound事件SetPaging方法:如果我不
private void SetPaging(GridView gv)
{
GridViewRow row = gv.BottomPagerRow;
var place = row.Cells[0];
var first = new LinkButton();
first.CommandName = "Page";
first.CommandArgument = "First";
first.Text = "First";
first.ToolTip = "First Page";
if (place != null) place.Controls.Add(first);
var lbl = new Label();
lbl.Text = " ";
if (place != null) place.Controls.Add(lbl);
var prev = new LinkButton();
prev.CommandName = "Page";
prev.CommandArgument = "Prev";
prev.Text = "Prev";
prev.ToolTip = "Previous Page";
if (place != null) place.Controls.Add(prev);
var lbl2 = new Label();
lbl2.Text = " ";
if (place != null) place.Controls.Add(lbl2);
for (int i = 1; i <= gv.PageCount; i++)
{
var btn = new LinkButton();
btn.CommandName = "Page";
btn.CommandArgument = i.ToString();
if (i == gv.PageIndex + 1)
{
btn.BackColor = Color.Gray;
}
btn.Text = i.ToString();
btn.ToolTip = "Page " + i.ToString();
if (place != null) place.Controls.Add(btn);
var lbl3 = new Label();
lbl3.Text = " ";
if (place != null) place.Controls.Add(lbl3);
}
var next = new LinkButton();
next.CommandName = "Page";
next.CommandArgument = "Next";
next.Text = "Next";
next.ToolTip = "Next Page";
if (place != null) place.Controls.Add(next);
var lbl4 = new Label();
lbl4.Text = " ";
if (place != null) place.Controls.Add(lbl4);
var last = new LinkButton();
last.CommandName = "Page";
last.CommandArgument = "Last";
last.Text = "Last";
last.ToolTip = "Last Page";
if (place != null) place.Controls.Add(last);
var lbl5 = new Label();
lbl5.Text = " ";
if (place != null) place.Controls.Add(lbl5);
}
尋呼工程使用自定義分頁,但我真的需要使用自定義分頁。我無法弄清楚爲什麼當我使用自定義分頁時,PageIndexChanging事件沒有被觸發。
感謝,
傑夫
我寧願動態創建尋呼機,因爲頁面上有多個GridViews。我嘗試將調用SetPaging(GridView gv)從gvSearchResults_DataBound事件移動到gvSearchResults_Init事件,但在 var place = row.Cells [0]; 因爲gv.BottomPagerRow爲空。 – JeffCren 2010-03-17 13:46:42
更新 - 在沒有UpdatePanel的頁面上,自定義分頁工作正常,當我查看源代碼時,我有這個: 2 在UpdatePanel中,我得到: 的 2 它丟棄命令和參數('頁$ 2' )。 –
JeffCren
2010-03-17 15:33:39
Aaah。什麼,UpdatePanel導致問題?誰會想到......我很確定UpdatePanel負責StackOverflow上ASP.NET問題的50%。什麼是ctl13 $ ctl06?這是面板ID嗎? – Bryan 2010-03-17 19:48:39