对GridView实现分页
前台代码:
<table>
<tr>
<td>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Id" HeaderText="编号" />
<asp:BoundField DataField="NewsTitle" HeaderText="标题" />
<asp:BoundField DataField="NewsContent" HeaderText="内容" />
<asp:BoundField DataField="RealName" HeaderText="创建者" />
<asp:BoundField DataField="CreateTime" DataFormatString="{0:yyyy-mm-dd hh:mm:ss}" HeaderText="创建时间" />
<asp:BoundField DataField="ClassName" HeaderText="类型" />
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td>
<asp:LinkButton ID="lbtnFirst" runat="server" OnClick="lbtnFirst_Click">第一页</asp:LinkButton>
<asp:LinkButton ID="lbtnProc" runat="server" OnClick="lbtnProc_Click">上一页</asp:LinkButton>
<asp:LinkButton ID="lbtnNext" runat="server" OnClick="lbtnNext_Click">下一页</asp:LinkButton>
<asp:LinkButton ID="lbtnLast" runat="server" OnClick="lbtnLast_Click">最后一页</asp:LinkButton>
</td>
</tr>
</table>
后台代码:
string constr = "data source=.;initial catalog=News;user id=sa;password=111111;";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageIndex"] = 1;
DataPage();
}
}
private void DataPage()
{
SqlConnection conn = new SqlConnection(constr);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
// string sql = "select T1.Id,T1.NewsTitle,SUBSTRING(T1.NewsContent,0,20) as NewsContent,T2.RealName ,T1.CreateTime,T3.ClassName from T_News1 T1 join T_User T2 on T1.NewsCreator=T2.UserId join T_NewsClass T3 on T1.ClassId=T3.ClassId";
string sql = " select T1.Id,T1.NewsTitle,SUBSTRING(T1.NewsContent,0,20) as NewsContent,T2.RealName,T1.CreateTime,T3.ClassName from (select ROW_NUMBER() over (order by Id) as rownumber,* from T_News) T1 join T_User T2 on T1.NewsCreator=T2.UserId join T_NewsClass T3 on T1.ClassId=T3.ClassId where rownumber>(@pageIndex-1)*@pageSize and rownumber<=@pageIndex*@pageSize";
cmd.Parameters.AddWithValue("@pageSize", 3);
cmd.Parameters.AddWithValue("@pageIndex", Convert.ToInt32(ViewState["pageIndex"]));
cmd.CommandText = sql;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
string sql1 = "select count(*) from T_News";
cmd.CommandText = sql1;
int i =Convert.ToInt32(cmd.ExecuteScalar());
if (i % 3 == 0)
{
ViewState["pageCount"] = i / 3;
}
else
{ ViewState["pageCount"] = i / 3+1; }
conn.Close();
conn.Dispose();
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void lbtnFirst_Click(object sender, EventArgs e)
{
ViewState["pageIndex"] = 1;
DataPage();
}
protected void lbtnProc_Click(object sender, EventArgs e)
{
int i=Convert.ToInt32(ViewState["pageIndex"]) ;
if (i>1)
{
i--;
ViewState["pageIndex"] = i;
DataPage();
}
}
protected void lbtnNext_Click(object sender, EventArgs e)
{
int i = Convert.ToInt32(ViewState["pageIndex"]);
if (i <Convert.ToInt32(ViewState["pageCount"]))
{
i++;
ViewState["pageIndex"] = i;
DataPage();
}
}
protected void lbtnLast_Click(object sender, EventArgs e)
{
ViewState["pageIndex"] = ViewState["pageCount"];
DataPage();
}