GridView控件自带分页功能,不过他是需要我们将所有数据查出来放到页面上,然后通过他内置的功能来实现分页,我本人不太喜欢,但对于小量数据时挺方便的。
这里我介绍一下数据库分页和自定义分页导航(使用GridView控件)
其效果如下图:
1、首先,我们要给一个空模板好让我们可以绑定数据。这个模板要有表头:
选择BounField【添加】在邮编DataField(查询出来的数据表里的字段名),HeaderText(页面显示的名称)
这里不要勾选【自动生成字段】
操作这一列,是空的,用来放我们的控件按钮的,所以选择TemplateField,然后添加表头名,主要,最后要把【自动生成字段】的勾去掉,才能让模板呈现我们想要的列。
操作完后的样子:
然后我们在操作里添加【编辑】【删除】按钮。
在这里我们拖拉或双击【Button】控件,要两个,一个编辑,一个删除。不添加事件。然后选择【编辑】按钮,到右下角找他的属性CommandName,改为Edit,通用【删除】按钮也是,改为Delete,这是固定的,同时还有其他值,比如Cancel(取消),Update(更新)等,固定值,只有这样设置,我们的按钮才能出发GridView里的事件。
然后,点击右上角的小三角,调出菜单,选择【EditItemTemplate】,会出现一个空的模板,在里面同样方法再添加两个按钮【保存】【取消】
EditItemTemplate里的东西,只有在GridView处于编辑状态下才会显示的。
结束编辑模板后:
2、数据库分页,按固定条数查出数据,类似于下面的,尽量不要使用DataTable。
还要注意的就是,@这个符号后的在单引号下不会被识别为变量,从而, '%镇%'=>'%@zhen%'=>‘%’+str+‘%’
public DataTable selectByStr(string str, int pageStart, int pageSize)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
int start = (pageStart - 1) * pageSize + 1;
int end = pageStart * pageSize;
String sql = @" select * from
(select *,ROW_NUMBER() over(order by id) as rowid from (
select c.id,a.name as pname,b.name as cname,c.name as name,c.people_size,c.area,c.XinzhengDaima,c.Quhao,c.email
from province a,city b,jiedao c
where a.id = b.parent_id and b.id = c.parent_id
) aa
where aa.pname like @pname or aa.cname like @cname or aa.name like @name) a
where rowid between @start and @end";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@pname", "%" + str + "%");
cmd.Parameters.AddWithValue("@cname", "%" + str + "%");
cmd.Parameters.AddWithValue("@name", "%" + str + "%");
cmd.Parameters.AddWithValue("@start", start);
cmd.Parameters.AddWithValue("@end", end);
//方法一
//info对象里要包含GridView里要求的字段
/* List<Info> list = new List<Info>();
while (sdr.Read())
{
list.Add(new Info(Convert.ToInt32(sdr["id"]), sdr["pname"].ToString(), sdr["cname"].ToString(), sdr["name"].ToString(), Convert.ToDouble(sdr["people_size"]), Convert.ToDouble(sdr["area"]), sdr["XinzhengDaima"].ToString(), sdr["Quhao"].ToString(), sdr["email"].ToString()));
}
DBHelper.closeConn(conn);
return list;*/
//方法二
/*SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;*/
//方法三
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable ds = new DataTable();
sda.Fill(ds);
conn.Close();
return ds;
}
然后是绑定数据,将下面代码放一个方法里调用,比如ViewData()方法
DataTable dt = null;
//全部数据
if (string.IsNullOrEmpty(SelectStr))
dt = countyB.SelectAll(PageIndex,PageSize);
else //查询的数据
dt = countyB.selectByStr(SelectStr, PageIndex,PageSize);
if (dt.Rows.Count != 0)
{
codeTable.DataSource = dt;
codeTable.DataBind();
}
在page_load方法里:第一页数据显示成功,
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
viewData();
}
}
效果如下,显示了指定的数据