VS中的DataGrid相信大家都很熟悉了, 功能十分的强大,唯一觉得有点遗憾的是分页导航,效果不是十分的完美,所以自己写了个自定义导航按钮。代码如下:
(数据表引用数据库Northwind中的products表。)
VS2003
DataGridNavig.aspx
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table>
<tr>
<td>
<asp:DataGrid id="myDataGrid" runat="server" Width="320px" Height="184px" AllowSorting="True"
ShowFooter="True" PageSize="5" AllowPaging="True" BorderColor="#E7E7FF" BorderStyle="None"
BorderWidth="1px" BackColor="White" CellPadding="3" GridLines="Horizontal">
<SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#F7F7F7"></AlternatingItemStyle>
<ItemStyle ForeColor="#4A3C8C" BackColor="#E7E7FF"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#4A3C8C"></HeaderStyle>
<FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE"></FooterStyle>
<Columns>
<asp:TemplateColumn HeaderText="ID">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ProductID")%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="ProductName">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ProductName")%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="UnitPrice">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"UnitPrice","{0:C}")%>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</td>
</tr>
<tr>
<td align="right">
共<%=this.myDataGrid.PageCount - 1%>
页 第<%=this.myDataGrid.CurrentPageIndex + 1%>页
<asp:LinkButton ID="btnFirst" Runat="server"></asp:LinkButton>
<asp:LinkButton ID="btnNext" Runat="server"></asp:LinkButton>
<asp:LinkButton ID="btnPrev" Runat="server"></asp:LinkButton>
<asp:LinkButton ID="btnLast" Runat="server"></asp:LinkButton>
转
<asp:TextBox ID="txtPageIndex" Runat="server" Width="32px"></asp:TextBox>
页
<asp:Button ID="btnRect" Text="转" Runat="server" Width="24px"></asp:Button>
</td>
</tr>
</table>
</form>
</body>
DataGridNavig.aspx.cs
private void Page_Load(object sender, System.EventArgs e)

...{
if(!IsPostBack)

...{
this.GridBund();//绑定数据
this.btnFirst.Text= "首页";
this.btnNext.Text= "下一页";
this.btnPrev.Text = "上一页";
this.btnLast.Text = "最后页";
}
}
private void GridBund()

...{
string stringSql = "select productID,productName,UnitPrice from products";
DataSet ds = SQLHelper.ExecuteDataSet(stringSql);
this.myDataGrid.DataSource = ds.Tables[0].DefaultView;
this.myDataGrid.DataBind();
}

/**//// <summary>
/// 分页
/// </summary>
private void myDataGrid_PageIndexChanged(object source,DataGridPageChangedEventArgs e)

...{
try

...{
this.myDataGrid.CurrentPageIndex = e.NewPageIndex;
}
catch

...{
this.myDataGrid.CurrentPageIndex = 0;
}
finally

...{
this.GridBund();
}
}

/**//// <summary>
/// 首页
/// </summary>
private void btnFirst_Click(object sender, System.EventArgs e)

...{
this.myDataGrid.CurrentPageIndex = 0;
this.GridBund();
}

/**//// <summary>
/// 下一页
/// </summary>
private void btnNext_Click(object sender, System.EventArgs e)

...{
if(this.myDataGrid.CurrentPageIndex < (this.myDataGrid.PageCount - 1))

...{
this.myDataGrid.CurrentPageIndex += 1;
this.GridBund();
}
}

/**//// <summary>
/// 上一页
/// </summary>
private void btnPrev_Click(object sender, System.EventArgs e)

...{
if(this.myDataGrid.CurrentPageIndex > 0)

...{
this.myDataGrid.CurrentPageIndex -= 1;
this.GridBund();
}
}

/**//// <summary>
/// 最后页
/// </summary>
private void btnLast_Click(object sender, System.EventArgs e)

...{
this.myDataGrid.CurrentPageIndex = (this.myDataGrid.PageCount -1);
this.GridBund();
}

/**//// <summary>
/// 转到第几页
/// </summary>
private void btnRect_Click(object sender, System.EventArgs e)

...{
int num = Int32.Parse(this.txtPageIndex.Text);
if(num <= 0 || num > (this.myDataGrid.PageCount -1))
return;
else

...{
this.myDataGrid.CurrentPageIndex = (num - 1);
this.GridBund();
}
}

如果有更好的方法,大家一起交流!^ ^