上文实现的GridView控件:
(一)翻页功能
翻页内容,主要实现的是该控件下面,上下翻页,跳转到指定页面。
翻页功能要注意前台页面下面这段代码中的相关命令:
<PagerTemplate >
当前第:
<%--//((GridView)Container.NamingContainer)就是为了得到当前的控件--%>
<asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>
页/共
<%--//得到分页页面的总数--%>
<asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>
页
<%--//如果该分页是首分页,那么该连接就不会显示了.同时对应了自带识别的命令参数CommandArgument--%>
<asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" BackColor="#2196f3" ForeColor="White"
Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页</asp:LinkButton>
<asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" BackColor="#2196f3" ForeColor="White"
CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页</asp:LinkButton>
<%--//如果该分页是尾页,那么该连接就不会显示了--%>
<asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" BackColor="#2196f3" ForeColor="White"
Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页</asp:LinkButton>
<asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" BackColor="#2196f3" ForeColor="White"
Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>
转到第
<%-- <asp:TextBox ID="txtNewPageIndex" CssClass="pagecount" runat="server" Width="40px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页--%>
<asp:TextBox ID="Pagenum" CssClass="pagenum" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页
<%--//这里将CommandArgument即使点击该按钮e.newIndex 值为3 --%>
<asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2" CssClass="pagejump" CommandName="Jump" Text="跳转" />
</PagerTemplate>
对应的,加入翻页控件的代码:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
ReturnCurBindData();
TextBox txt = (TextBox)GridView1.BottomPagerRow.FindControl("Pagenum");
txt.Text = (GridView1.PageIndex + 1).ToString();
}
ReturnCurBindData()方法的代码,是判断是否有搜索关键字或者分页,来重新绑定数据的。
private void ReturnCurBindData()
{
if (txt_key.Text.Trim() != "")//当有搜索关键词时,根据关键词绑定数据
{
this.GridView1.DataSource = SoftToolsDAL.SelectSoftToolsBySearchKey(txt_key.Text.Trim());//SoftToolsDal.SelectAllSoftToolsByClassid(int.Parse(selectvaule));
this.GridView1.DataBind();
}
else
{
//如果没有关键词,看是否按分类来绑定。
if (ddl_class.SelectedValue != "0")
{
this.GridView1.DataSourceID = null;
string selectvaule = this.ddl_class.SelectedValue;
if (selectvaule == "0")
{
Response.Redirect("DataBindProduce.aspx");
}
else
{
this.GridView1.DataSource = SoftToolsDAL.SelectAllSoftToolsByClassid(int.Parse(selectvaule));
this.GridView1.DataBind();
}
}
else
{
//初始情况下重新绑定
InitData();
}
}
}
跳转到指定页面的代码如下:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Jump")
{
try
{
TextBox txt = (TextBox)GridView1.BottomPagerRow.FindControl("Pagenum");
int pagenum = int.Parse(txt.Text);
GridViewPageEventArgs ea = new GridViewPageEventArgs(pagenum - 1);
GridView1_PageIndexChanging(null, ea);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
(二)每行绑定特殊控件
有时候,我们要在列表中每一行中加入除TextBox以外的其他特殊控件,比如DropDownList控件,来修改分类等,这类特殊控件的内嵌,主要是在GridView1_RowDataBound()实现的
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//绑定上传人,根据用户ID查询用户名,然后绑定单独列
if (((Label)e.Row.FindControl("lbl_Softupuserid")) != null && ((HiddenField)e.Row.FindControl("hf_Softupuserid")) != null)
{
Label lbl_Softupuserid = (Label)e.Row.FindControl("lbl_Softupuserid");
HiddenField hf_Softupuserid = (HiddenField)e.Row.FindControl("hf_Softupuserid");
// Users us = UserService.GetTheUsers(hf_Softupuserid.Value);
lbl_Softupuserid.Text = "管理员";
}
//绑定DDL 所属类别
if (((DropDownList)e.Row.FindControl("ddl_SoftClassname")) != null)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ddl_SoftClassname");
HiddenField hf = (HiddenField)e.Row.FindControl("hf_softclassname");
foreach (ListItem item in ddl.Items)
{
if (item.Text == hf.Value)
{
item.Selected = true;
}
}
}
//绑定推荐
if (((Label)e.Row.FindControl("lbl_recommand")) != null)
{
Label lbl_rec = (Label)e.Row.FindControl("lbl_recommand");
if (lbl_rec.Text == "1")
{
lbl_rec.Text = "首页显示";
}
else
{
lbl_rec.Text = "未推荐";
}
}
if (((DropDownList)e.Row.FindControl("ddlToTop")) != null)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ddlToTop");
//HiddenField hf = (HiddenField)e.Row.FindControl("hf_softclassname");
HiddenField hf_rec = (HiddenField)e.Row.FindControl("hf_recommand");
foreach (ListItem item in ddl.Items)
{
if (item.Value == hf_rec.Value)
{
item.Selected = true;
}
}
}
}
在这个方法里面,也可以绑定样式,例如奇偶行不同色等。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#cbe2fa'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
}
}
(三)行、列样式
每一列数据居中等样式,主要通过控件的HeaderStyle-CssClass="headcenter" HeaderStyle-Width="100" ItemStyle-HorizontalAlign="Center“属性来实现的。
(四)常见错误
1、有人在调试跳转到指定页代码时,总是无法获取到正确的Pagenum值。
解决方法:
要在页面加载方法Page_Load中,加入如下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
.....
}
}
如果,没有该代码Page.IsPostBack,则每次点击asp.net控件,页面都会认为是刷新,所有每次的Pagenum值都是初始值。
在asp.net中,页面基础有个回传机制,postback就是回传,即页面在首次加载后向服务器提交数据,然后服务器把处理好的数据传递到客户端并显示出来,就叫postback; Ispostback只是一个属性,即判断页面是否是回传,if(!Ispostback)就表示页面是首次加载,这是很常用的一个判断方式.一个页面只能加载一次,但可以在加载后反复postback。
每次页面Load的时候,根据需要把每次都要加载的代码放在IsPostBack中,只需要加载一次的代码放在if(!IsPostBack)中。
2、分析器错误消息: 未知的服务器标记“asp:ScriptManager”。 原因web.config,没有配置好!
解决方法:加入
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
原因:
1, ScriptManager(脚本控制器)是asp.net ajax存在的基础.
2, 一个页面只允许有一个ScriptManager,并且放在其他ajax控件的前面.
3,ScriptManager掌管着客户端Ajax页的多有脚本,并在页面中注册Ajax类库,用来实现页面的局部更新和对Web服务的调用.