默認的pager機制在最後一行插入一個表格,然後這個表格包含一行所需的包含頁碼的單元格(我將頁面模式設置爲數字)。我不想創建這個嵌套表格,而是創建一個由小方塊組成的頁面模板,這些小方塊浮動到彼此的左側,每個框中都有頁碼。定製pagertemplate
你如何創建一個類似的傳呼機模板?
謝謝
默認的pager機制在最後一行插入一個表格,然後這個表格包含一行所需的包含頁碼的單元格(我將頁面模式設置爲數字)。我不想創建這個嵌套表格,而是創建一個由小方塊組成的頁面模板,這些小方塊浮動到彼此的左側,每個框中都有頁碼。定製pagertemplate
你如何創建一個類似的傳呼機模板?
謝謝
放置PagerTemplate內Repeater控件如下:
<PagerTemplate>
<asp:Repeater ID="repFooter" OnItemCommand="repFooter_ItemCommand" runat="server">
<HeaderTemplate>
<div class="pager">
</HeaderTemplate>
<ItemTemplate>
<div class="page">
<asp:LinkButton ID="lnkPage" Text='<%# Container.DataItem %>' CommandName="ChangePage" CommandArgument="<%# Container.DataItem %>" runat="server" />
</div>
</ItemTemplate>
<FooterTemplate>
<div class="clear"></div>
</div>
</FooterTemplate>
</asp:Repeater>
</PagerTemplate>
然後添加一個事件處理程序網格的數據綁定事件,設置數據源的轉發如下:
protected void GridView1_DataBound(object sender, EventArgs e)
{
GridViewRow pagerRow = GridView1.BottomPagerRow;
if (pagerRow != null)
{
Repeater repFooter = (Repeater)pagerRow.Cells[0].FindControl("repFooter");
List<int> pages = new List<int>();
for (int i = 0; i < GridView1.PageCount; i++)
{
pages.Add(i + 1);
}
repFooter.DataSource = pages;
repFooter.DataBind();
}
}
添加事件處理程序來處理中繼器的ItemCommand事件,如下所示:
protected void repFooter_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "ChangePage")
{
GridView1.PageIndex = Convert.ToInt32(e.CommandArgument) - 1;
}
}
這是一個下拉列表替換默認尋呼機MSDN上的另一個樣本: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate.aspx
我會使用中繼器,並採取好的控制。每個人都會達到曲線在方便和精細控制之間翻轉的點,而且看起來您已經擊中了它。
如果你真的想模仿尋呼機,你可以將中繼器包裝在自己的用戶控件中,然後引發相同的事件。
我正在使用gridview來處理排序。如何在stackoverflow上完成尋呼機,digg ....帶頁碼的方框列表?我可以做所有這些,但我堅持如何把網址,以便更改頁面事件正確觸發。 – frenchie 2011-02-08 00:29:35
另一種方法是在樣式表尋呼機本身。
添加CSS類尋呼機如下:
<asp:GridView ... >
<PagerStyle CssClass="pager" />
</asp:GridView>
這將一個類添加到尋呼機錶行。
現在設置CSS樣式選擇包含頁碼如下TD:
tr.pager td table td
{
margin: 2px;
width: 10px;
padding: 0px 3px 0px 3px;
background-color: #FBFBFB;
text-align: center;
border: solid 1px #CACACA;
}
下面是一個使用GridView的內置分頁命令的另一種方法。這也會在網格的當前頁面上呈現一個Label而不是LinkButton。
創建從了Itemplate繼承的類如下:
public class PagerTemplate: ITemplate
{
private const string PAGE_COMMAND_NAME = "Page";
public GridView AssociatedGridView { get; private set; }
public PagerTemplate(GridView associatedGridView)
{
this.AssociatedGridView = associatedGridView;
}
public void InstantiateIn(Control container)
{
for (int i = 0; i < this.AssociatedGridView.PageCount; i++)
{
Panel pnlBox = new Panel();
if (this.AssociatedGridView.PageIndex != i)
{
LinkButton lnkPage = new LinkButton();
lnkPage.Text = (i + 1).ToString();
lnkPage.CommandName = PAGE_COMMAND_NAME;
lnkPage.CommandArgument = (i + 1).ToString();
pnlBox.Controls.Add(lnkPage);
}
else
{
Label lblPage = new Label();
lblPage.Text = (i + 1).ToString();
pnlBox.Controls.Add(lblPage);
}
container.Controls.Add(pnlBox);
}
}
}
然後在頁面初始化事件中執行以下操作:
protected void Page_Init(object sender, EventArgs e)
{
GridView1.PagerTemplate = new PagerTemplate(GridView1);
}
使用這種方法,你也可以添加上一頁,下一頁通過將它們的CommandName設置爲「上一個」,「下一個」,「第一個」和「最後一個」來設置第一個和最後一個頁面按鈕。
短除了marzouka的回答是:
使用這種方法,你也可以添加上一頁,下一頁,通過設置他們的CommandName的第一頁和最後一頁按鈕「上一頁」,「下一頁」,「第一」, 「持續」。
要實現上一頁,下一頁,第一頁和最後一頁按鈕,你必須改變CommandArgument ...的的CommandName仍必須「頁面」
例如
LinkButton firstButton = new LinkButton();
firstButton.CommandName = "Page";
firstButton.CommandArgument = "First";
firstButton.Text = "First";
container.Controls.Add(firstButton);
哇,這看起來像它會工作!謝謝;所有其他尋呼機模板是關於添加一個下拉菜單,但你的站點!還有一件事:你如何處理gridview頁面的變化? – frenchie 2011-02-08 18:08:31