• C#操作GridView控件绑定数据实例详解(二)


    上文实现的GridView控件:

    (一)翻页功能

    翻页内容,主要实现的是该控件下面,上下翻页,跳转到指定页面。 

    翻页功能要注意前台页面下面这段代码中的相关命令:

    1. <PagerTemplate >
    2. 当前第:
    3. <%--//((GridView)Container.NamingContainer)就是为了得到当前的控件--%>
    4. <asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>">asp:Label>
    5. 页/共
    6. <%--//得到分页页面的总数--%>
    7. <asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>">asp:Label>
    8. <%--//如果该分页是首分页,那么该连接就不会显示了.同时对应了自带识别的命令参数CommandArgument--%>
    9. <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" BackColor="#2196f3" ForeColor="White"
    10. Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页asp:LinkButton>
    11. <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" BackColor="#2196f3" ForeColor="White"
    12. CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页asp:LinkButton>
    13. <%--//如果该分页是尾页,那么该连接就不会显示了--%>
    14. <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" BackColor="#2196f3" ForeColor="White"
    15. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页asp:LinkButton>
    16. <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" BackColor="#2196f3" ForeColor="White"
    17. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页asp:LinkButton>
    18. 转到第
    19. <%-- <asp:TextBox ID="txtNewPageIndex" CssClass="pagecount" runat="server" Width="40px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页--%>
    20. <asp:TextBox ID="Pagenum" CssClass="pagenum" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />
    21. <%--//这里将CommandArgument即使点击该按钮e.newIndex 值为3 --%>
    22. <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2" CssClass="pagejump" CommandName="Jump" Text="跳转" />
    23. PagerTemplate>

    对应的,加入翻页控件的代码:

    1. protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    2. {
    3. GridView1.PageIndex = e.NewPageIndex;
    4. ReturnCurBindData();
    5. TextBox txt = (TextBox)GridView1.BottomPagerRow.FindControl("Pagenum");
    6. txt.Text = (GridView1.PageIndex + 1).ToString();
    7. }

    ReturnCurBindData()方法的代码,是判断是否有搜索关键字或者分页,来重新绑定数据的。

    1. private void ReturnCurBindData()
    2. {
    3. if (txt_key.Text.Trim() != "")//当有搜索关键词时,根据关键词绑定数据
    4. {
    5. this.GridView1.DataSource = SoftToolsDAL.SelectSoftToolsBySearchKey(txt_key.Text.Trim());//SoftToolsDal.SelectAllSoftToolsByClassid(int.Parse(selectvaule));
    6. this.GridView1.DataBind();
    7. }
    8. else
    9. {
    10. //如果没有关键词,看是否按分类来绑定。
    11. if (ddl_class.SelectedValue != "0")
    12. {
    13. this.GridView1.DataSourceID = null;
    14. string selectvaule = this.ddl_class.SelectedValue;
    15. if (selectvaule == "0")
    16. {
    17. Response.Redirect("DataBindProduce.aspx");
    18. }
    19. else
    20. {
    21. this.GridView1.DataSource = SoftToolsDAL.SelectAllSoftToolsByClassid(int.Parse(selectvaule));
    22. this.GridView1.DataBind();
    23. }
    24. }
    25. else
    26. {
    27. //初始情况下重新绑定
    28. InitData();
    29. }
    30. }
    31. }

    跳转到指定页面的代码如下:

    1. protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    2. {
    3. if (e.CommandName == "Jump")
    4. {
    5. try
    6. {
    7. TextBox txt = (TextBox)GridView1.BottomPagerRow.FindControl("Pagenum");
    8. int pagenum = int.Parse(txt.Text);
    9. GridViewPageEventArgs ea = new GridViewPageEventArgs(pagenum - 1);
    10. GridView1_PageIndexChanging(null, ea);
    11. }
    12. catch(Exception ex)
    13. {
    14. Console.WriteLine(ex.ToString());
    15. }
    16. }
    17. }

    (二)每行绑定特殊控件

    有时候,我们要在列表中每一行中加入除TextBox以外的其他特殊控件,比如DropDownList控件,来修改分类等,这类特殊控件的内嵌,主要是在GridView1_RowDataBound()实现的

    1. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    2. {
    3. //绑定上传人,根据用户ID查询用户名,然后绑定单独列
    4. if (((Label)e.Row.FindControl("lbl_Softupuserid")) != null && ((HiddenField)e.Row.FindControl("hf_Softupuserid")) != null)
    5. {
    6. Label lbl_Softupuserid = (Label)e.Row.FindControl("lbl_Softupuserid");
    7. HiddenField hf_Softupuserid = (HiddenField)e.Row.FindControl("hf_Softupuserid");
    8. // Users us = UserService.GetTheUsers(hf_Softupuserid.Value);
    9. lbl_Softupuserid.Text = "管理员";
    10. }
    11. //绑定DDL 所属类别
    12. if (((DropDownList)e.Row.FindControl("ddl_SoftClassname")) != null)
    13. {
    14. DropDownList ddl = (DropDownList)e.Row.FindControl("ddl_SoftClassname");
    15. HiddenField hf = (HiddenField)e.Row.FindControl("hf_softclassname");
    16. foreach (ListItem item in ddl.Items)
    17. {
    18. if (item.Text == hf.Value)
    19. {
    20. item.Selected = true;
    21. }
    22. }
    23. }
    24. //绑定推荐
    25. if (((Label)e.Row.FindControl("lbl_recommand")) != null)
    26. {
    27. Label lbl_rec = (Label)e.Row.FindControl("lbl_recommand");
    28. if (lbl_rec.Text == "1")
    29. {
    30. lbl_rec.Text = "首页显示";
    31. }
    32. else
    33. {
    34. lbl_rec.Text = "未推荐";
    35. }
    36. }
    37. if (((DropDownList)e.Row.FindControl("ddlToTop")) != null)
    38. {
    39. DropDownList ddl = (DropDownList)e.Row.FindControl("ddlToTop");
    40. //HiddenField hf = (HiddenField)e.Row.FindControl("hf_softclassname");
    41. HiddenField hf_rec = (HiddenField)e.Row.FindControl("hf_recommand");
    42. foreach (ListItem item in ddl.Items)
    43. {
    44. if (item.Value == hf_rec.Value)
    45. {
    46. item.Selected = true;
    47. }
    48. }
    49. }
    50. }

    在这个方法里面,也可以绑定样式,例如奇偶行不同色等。

    1. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    2. {
    3. if (e.Row.RowType == DataControlRowType.DataRow)
    4. {
    5. e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#cbe2fa'");
    6. e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
    7. }
    8. }

    (三)行、列样式

    每一列数据居中等样式,主要通过控件的HeaderStyle-CssClass="headcenter" HeaderStyle-Width="100"  ItemStyle-HorizontalAlign="Center“属性来实现的。

    (四)常见错误

    1、有人在调试跳转到指定页代码时,总是无法获取到正确的Pagenum值。

    解决方法:

          要在页面加载方法Page_Load中,加入如下代码:

    1. protected void Page_Load(object sender, EventArgs e)
    2. {
    3. if (!Page.IsPostBack)
    4. {
    5. .....
    6. }
    7. }

          如果,没有该代码Page.IsPostBack,则每次点击asp.net控件,页面都会认为是刷新,所有每次的Pagenum值都是初始值。

          在asp.net中,页面基础有个回传机制,postback就是回传,即页面在首次加载后向服务器提交数据,然后服务器把处理好的数据传递到客户端并显示出来,就叫postback; Ispostback只是一个属性,即判断页面是否是回传,if(!Ispostback)就表示页面是首次加载,这是很常用的一个判断方式.一个页面只能加载一次,但可以在加载后反复postback。

          每次页面Load的时候,根据需要把每次都要加载的代码放在IsPostBack中,只需要加载一次的代码放在if(!IsPostBack)中。

    2、分析器错误消息: 未知的服务器标记“asp:ScriptManager”。 原因web.config,没有配置好!

    解决方法:加入

     

    原因:

          1, ScriptManager(脚本控制器)是asp.net ajax存在的基础.
          2, 一个页面只允许有一个ScriptManager,并且放在其他ajax控件的前面.
          3,ScriptManager掌管着客户端Ajax页的多有脚本,并在页面中注册Ajax类库,用来实现页面的局部更新和对Web服务的调用.
     

  • 相关阅读:
    python连接带用户认证mongo,,并进行查询操作
    datax同步数据简介
    opencv中的仿射变换
    Kong Learning
    【数之道 08】走进“卷积神经网络“,了解图像识别背后的原理
    vue的学习
    STL教程5-STL基本概念及String和vector使用
    狂神说Java--Java学习笔记(合集)
    【WPS-OFFICE-Word】 WPS中样式的运作原理?样式自动更新、自动改变如何处理?样式的管理方法?
    白银实时价格应该在最适合的地方下注
  • 原文地址:https://blog.csdn.net/lanhai96/article/details/126615133