.net自定义分页实现以及没有任何数据时保留表头

前台:

<asp:GridView ID="gvData" runat="server" DataKeyNames="cnuiWorkID" PageSize="10" AutoGenerateColumns="False"
            AllowPaging="true" IsSortedAscending="True" AllowSorting="True" CellPadding="0"
            CellSpacing="0" CommandText="删除" LbtCommon="lbtDelete" HorizontalAlign="Center"
            GridLines="None" Width="100%" OnRowCommand="gvData_RowCommand"  Height="30px" Font-Size="10pt" CssClass="tablebox" EmptyDataText=" 没有查找到相关信息!">
            <Columns>
                <asp:TemplateField HeaderText="序号">
                    <ItemTemplate>
                        <%#Container.DataItemIndex +1%>
                    </ItemTemplate>
                    <HeaderStyle Width="3%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="3%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                <asp:TemplateField HeaderText="标题">
                    <ItemTemplate>
                         <asp:HyperLink ID="HyperLink0" runat="server" Target="_blank" NavigateUrl='<%#"WorkInfoForLeader.aspx?WorkID="+DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString()+"&&Type=move&&flag=NO" %>'> <%#DataBinder.Eval(Container.DataItem, "cnvcTitle").ToString()%>
                         <span style="color:Red;"><%#this.isNewMoveWork(DataBinder.Eval(Container.DataItem,"cnuiWorkID").ToString(),DataBinder.Eval(Container.DataItem,"cnvcOperateEname").ToString())%></span>      
                        </asp:HyperLink>
                    </ItemTemplate>
                    <HeaderStyle Width="16%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="16%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                <asp:TemplateField HeaderText="创建日期">
                    <ItemTemplate>
                       <%#DataBinder.Eval(Container.DataItem, "cndCreateDate").ToString().Substring(0,10)%>
                    </ItemTemplate>
                    <HeaderStyle Width="6%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="6%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                <asp:TemplateField HeaderText="过期日期">
                    <ItemTemplate>
                        <%#DataBinder.Eval(Container.DataItem, "cndDeadDate").ToString()%>
                    </ItemTemplate>
                    <HeaderStyle Width="6%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="6%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                 <asp:TemplateField HeaderText="剩余天数">
                    <ItemTemplate>
                       <%#DataBinder.Eval(Container.DataItem, "day").ToString()%>
                    </ItemTemplate>
                    <HeaderStyle Width="6%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="6%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                 <asp:TemplateField HeaderText="移交">
                    <ItemTemplate>
                       <a  href="javascript:OpenNewLen('<%#"HandOver.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString() %>','500','250')">移交</a>
                    </ItemTemplate>
                    <HeaderStyle Width="3%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="3%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                <asp:TemplateField HeaderText="分发">
                    <ItemTemplate>
                       <a  href="javascript:OpenNewLen('<%#"HandOut.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString() %>','500','400')">分发</a>
                    </ItemTemplate>
                    <HeaderStyle Width="3%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="3%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                 <asp:TemplateField HeaderText="结束">
                    <ItemTemplate>
                    <a  href="javascript:OpenNewLen('<%#"FinishWork.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString()+"&day="+ DataBinder.Eval(Container.DataItem, "day").ToString()%>','500','250')">结束</a>
                    </ItemTemplate>
                    <HeaderStyle Width="3%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="3%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                 <asp:TemplateField HeaderText="终止">
                    <ItemTemplate>
                           <a  href="javascript:OpenNewLen('<%#"EndWork.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString() %>','500','250')">终止</a>

                    </ItemTemplate>
                    <HeaderStyle Width="3%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="3%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
               
                <asp:TemplateField HeaderText="操作">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="return confirm('确定删除?')" CommandName="deleteRow" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString()%>'>删除</asp:LinkButton>
                        <asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl='<%#"AlterWork.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString() %>'>修改</asp:HyperLink>
      <asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl='<%#"../Add/AddTask.aspx?WorkID="+ DataBinder.Eval(Container.DataItem, "cnuiWorkID").ToString() %>'>添加任务</asp:HyperLink>
                    </ItemTemplate>
                    <HeaderStyle Width="9%" HorizontalAlign="Center" Font-Bold="true"></HeaderStyle>
                    <ItemStyle Width="9%" HorizontalAlign="Center"></ItemStyle>
                </asp:TemplateField>
            </Columns>
            <PagerSettings Visible="False" />
          </asp:GridView>       
   </td>
  </tr>
  <tr>
   <td align="right" style="height: 25px">
      <asp:Label ID="LblCurrentIndex" runat="server"></asp:Label>
            <asp:Label ID="LblPageCount"    runat="server"></asp:Label>
            <asp:Label ID="LblRecordCount"  runat="server"></asp:Label>
            <asp:LinkButton ID="btnFirst" CommandArgument="first" OnClick="PagerButtonClick"  runat="server">[首 页]</asp:LinkButton>
            <asp:LinkButton ID="btnPrev"  CommandArgument="prev"  OnClick="PagerButtonClick"  runat="server">[上一页]</asp:LinkButton>
            <asp:LinkButton ID="btnNext"  CommandArgument="next"  OnClick="PagerButtonClick"  runat="server">[下一页]</asp:LinkButton>
            <asp:LinkButton ID="btnLast"  CommandArgument="last"  OnClick="PagerButtonClick"  runat="server">[尾 页]</asp:LinkButton>
            &nbsp;&nbsp; 跳转到:
            <asp:DropDownList ID="pageDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="pageDropDownList_SelectedIndexChanged"> </asp:DropDownList>
        </td>
    </tr>
     </table>

后台:

 #region  绑定数据
        /// <summary>
        /// 绑定数据
        /// </summary>
        public void MyDataBind()
        {
            WebPage werPage = new WebPage(gvData, btnFirst, btnPrev, btnNext, btnLast, LblCurrentIndex, LblPageCount, LblRecordCount, pageDropDownList);
            werPage.BindPage(DataTableView());
        }
        #endregion

        #region 得到DataTable数据表
        /// <summary>
        /// 得到DataTable数据表
        /// </summary>
        private DataTable DataTableView()
        {
            DataTable dt=new DataTable();
            //得到登陆账户
            string userEname = HNAS.IMP.WebComponents.PageBase.GetAccount();
            WorkBF workBF = new WorkBF();
            //查询工作单cnvcOperateEname为userEname的所有信息列表
            ReturnValueSF rvSF = workBF.GetWorkByOperateEname(userEname);
            if (rvSF.Result > 0)
            {
                //结果集赋值给DataTable
                dt = rvSF.Dt;
                //增加一个列,显示提醒时间
                dt.Columns.Add("day");
                //初始化开始时间
                DateTime start = new DateTime();
                //结束时间
                DateTime end = new DateTime();
                //当前时间的日期部分,忽略小时部分
                DateTime now = DateTime.Now.Date;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                     //取出开始时间和结束时间
                     start = (DateTime)dt.Rows[i]["cndCreateDate"];
                     //得到开始时间的日期
                     start=start.Date;
                     //把日期转换为时间
                     end = Convert.ToDateTime(dt.Rows[i]["cndDeadDate"]+" 00:00:00");
                     //给列表赋值 当前剩余的天数
                     dt.Rows[i]["day"] = GetDays(start, end,now);
                }
            }
            return dt;
        }
        #endregion

        #region 实现分页
        /// <summary>
        ///  实现分页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void PagerButtonClick(object sender, EventArgs e)
        {
            gvData.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName) - 1;
            MyDataBind();

        }

        #endregion

        #region 分页跳转
        /// <summary>
        ///  分页跳转
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void pageDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvData.PageIndex = Convert.ToInt32(pageDropDownList.SelectedValue) - 1;
            MyDataBind();
        }
        #endregion

        #region 删除操作
        /// <summary>
        /// 操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvData_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            string commandName = e.CommandName.ToString();
            string WorkID = e.CommandArgument.ToString();

            //删除   --其实是修改
            if (commandName == "deleteRow")
            {
                ReturnValueSF rvSF = new ReturnValueSF();
                //根据工作单ID删除该工作单 假删除
                rvSF = new WorkBF().DeleteWorkByID(new Guid(WorkID));
                //删除工作单的同时删除该工作单的监督领导
                if (rvSF.Result > 0)
                {
                    HNAS.Public.WebCommon.AlertMsn.PopMsn(rvSF.Result, rvSF.Message);
                }
                //再次绑定数据
                MyDataBind();
            }
        }
        #endregion

分页实现:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;


namespace HNAS.IMPTaskWebUI.WebCommon
{
    /// <summary>
    /// 分页,实现gridview的分页
    /// </summary>
    public class WebPage
    {
         #region 全局属性定义
         /// <summary>
         ///  全局属性定义
         /// </summary>
         private   GridView gvData;       //数据视图
         private   LinkButton btnFirst ;  //首页
         private   LinkButton btnPrev ;   //上一页
         private   LinkButton btnNext ;   //下一页
         private   LinkButton btnLast;    //尾页
         private   Label LblCurrentIndex; //当前页
         private   Label LblPageCount;    //总得页数
         private   Label LblRecordCount;  //总共记录数
         private   DropDownList pageDropDownList; //下拉列表
         #endregion

         #region 无参构造器
         /// <summary>
         /// 无参构造器
         /// </summary>
         public WebPage() { }
         #endregion

         #region 构造器初始化
         /// <summary>
         ///  构造器初始化
         /// </summary>
         /// <param name="gvData">girdview</param>
         /// <param name="btnFirst">首页</param>
         /// <param name="btnPrev">上一页</param>
         /// <param name="btnNext">下一页</param>
         /// <param name="btnLast">尾页</param>
         /// <param name="LblCurrentIndex">当前页</param>
         /// <param name="LblPageCount">总页数</param>
         /// <param name="LblRecordCount">总记录数</param>
         /// <param name="pageDropDownList">下拉列表</param>
         /// 创 建 人:申明英
         /// 创建日期:2011-9-16
         /// 修 改 人:
         /// 修改日期:
        public  WebPage(GridView gvData, LinkButton btnFirst, LinkButton btnPrev, LinkButton btnNext, LinkButton btnLast, Label LblCurrentIndex, Label LblPageCount, Label LblRecordCount, DropDownList pageDropDownList)
        {
            this.gvData = gvData;
            this.btnFirst = btnFirst;
            this.btnPrev = btnPrev;
            this.btnNext = btnNext;
            this.btnLast = btnLast;
            this.LblCurrentIndex = LblCurrentIndex;
            this.LblPageCount = LblPageCount;
            this.LblRecordCount = LblRecordCount;
            this.pageDropDownList = pageDropDownList;

        }
        #endregion

         #region 分页实现
        /// <summary>
        /// 分页实现
        /// </summary>
        /// <param name="DT">表数据</param>
        public void BindPage(DataTable DT)
        {
            try
            {
                //绑定数据源
                gvData.DataSource = DT;
                gvData.DataBind();

                //设置分页按钮是否可用
                btnFirst.Enabled = true;
                btnPrev.Enabled = true;
                btnNext.Enabled = true;
                btnLast.Enabled = true;

                //初始化数据
                LblCurrentIndex.Text = "第 " + (gvData.PageIndex + 1).ToString() + " 页";
                LblPageCount.Text = "共 " + gvData.PageCount.ToString() + " 页";
                LblRecordCount.Text = "总共 " + DT.Rows.Count.ToString() + " 条";
                if (gvData.PageIndex == 0)
                {
                    btnFirst.Enabled = false;
                    btnPrev.Enabled = false;
                }
                else if (gvData.PageIndex == gvData.PageCount - 1)
                {
                    btnNext.Enabled = false;
                    btnLast.Enabled = false;
                }

                //当只有一页的时候 所有控件不可用
                if (gvData.PageCount == 1)
                {
                    btnFirst.Enabled = false;
                    btnPrev.Enabled = false;
                    btnNext.Enabled = false;
                    btnLast.Enabled = false;
                }

                //清空页面序号
                pageDropDownList.Items.Clear();

                //加载页面序号
                for (int i = 1; i < gvData.PageCount + 1; i++)
                {
                    pageDropDownList.Items.Add(i.ToString());
                }
                //得到选择的值
                pageDropDownList.SelectedValue = Convert.ToString(gvData.PageIndex + 1);
                // 计算生成分页页码首 页
                btnFirst.CommandName = "1";
                //上一页
                btnPrev.CommandName = (gvData.PageIndex == 0 ? "1" : gvData.PageIndex.ToString());
                //下一页
                btnNext.CommandName = (gvData.PageCount == 1 ? gvData.PageCount.ToString() : (gvData.PageIndex + 2).ToString());
                //尾页
                btnLast.CommandName = gvData.PageCount.ToString();


                //如果没有数据 让所有控件不可用,并设置表头信息
                if (DT.Rows.Count == 0)
                {
                    btnFirst.Enabled = false;
                    btnPrev.Enabled = false;
                    btnNext.Enabled = false;
                    btnLast.Enabled = false;

                    //没有数据的时候显示表头
                    //表头的设置
                    GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                    foreach (DataControlField field in this.gvData.Columns)
                    {
                        //设置表头的样式
                        TableHeaderCell cell = new TableHeaderCell();
                       // TableCell cell = new TableCell();
                        //获取表头的标题
                        cell.Text = field.HeaderText;
                        cell.Width = field.HeaderStyle.Width;
                        cell.Height = field.HeaderStyle.Height;
                        cell.ForeColor = field.HeaderStyle.ForeColor;
                        cell.Font.Size = field.HeaderStyle.Font.Size;
                        cell.Font.Bold = field.HeaderStyle.Font.Bold;
                        cell.Font.Name = field.HeaderStyle.Font.Name;
                        cell.Font.Strikeout = field.HeaderStyle.Font.Strikeout;
                        cell.Font.Underline = field.HeaderStyle.Font.Underline;
                        cell.BackColor = field.HeaderStyle.BackColor;
                        cell.VerticalAlign = field.HeaderStyle.VerticalAlign;
                        cell.HorizontalAlign = field.HeaderStyle.HorizontalAlign;
                        cell.CssClass = field.HeaderStyle.CssClass;
                        cell.BorderColor = field.HeaderStyle.BorderColor;
                        cell.BorderStyle = field.HeaderStyle.BorderStyle;
                        cell.BorderWidth = field.HeaderStyle.BorderWidth;
                        row.Cells.Add(cell);
                    }
                    //设置表头的样式
                    //得到原来表头的样式
                    TableItemStyle headStyle = this.gvData.HeaderStyle;
                    //设置表头样式
                    TableItemStyle emptyStyle = this.gvData.EmptyDataRowStyle;
                    emptyStyle.Width = headStyle.Width;
                    emptyStyle.Height = headStyle.Height;
                    emptyStyle.ForeColor = headStyle.ForeColor;
                    emptyStyle.Font.Size = headStyle.Font.Size;
                    emptyStyle.Font.Bold = headStyle.Font.Bold;
                    emptyStyle.Font.Name = headStyle.Font.Name;
                    emptyStyle.Font.Strikeout = headStyle.Font.Strikeout;
                    emptyStyle.Font.Underline = headStyle.Font.Underline;
                    emptyStyle.BackColor = headStyle.BackColor;
                    emptyStyle.VerticalAlign = headStyle.VerticalAlign;
                    emptyStyle.HorizontalAlign = headStyle.HorizontalAlign;
                    emptyStyle.CssClass = headStyle.CssClass;
                    emptyStyle.BorderColor = headStyle.BorderColor;
                    emptyStyle.BorderStyle = headStyle.BorderStyle;
                    emptyStyle.BorderWidth = headStyle.BorderWidth;
                    //空白行的设置
                    GridViewRow row1 = new GridViewRow(0, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                
                    TableCell cell1 = new TableCell();

                    //设置没有数据时显示的内容
                    cell1.Text = "没有任何数据可以显示";
                    cell1.BackColor = System.Drawing.Color.White;
                    //添加单元格
                    row1.Cells.Add(cell1);
                    cell1.ColumnSpan =this.gvData.Columns.Count; //得到gridview的列数 
                     
                    if (this.gvData.Controls.Count == 0) //不存在girdView
                    {
                        //this.gvData.Page.Response.Write("<script language='javascript'>alert('必须在初始化表格类之前执行DataBind方法并设置EmptyDataText属性不为空!');</script>");
                    }
                    else
                    {
                        this.gvData.Controls[0].Controls.Clear();
                        this.gvData.Controls[0].Controls.AddAt(0, row);
                        this.gvData.Controls[0].Controls.AddAt(1, row1);
         
                    }
                }

            }
            catch (Exception ex)
            {
                HttpContext.Current.Response.Write("数据库错误,错误原因:" + ex.Message);
                HttpContext.Current.Response.End();
            }

        }

        #endregion
    }
}

 

posted @ 2011-11-09 09:56  浪漫满屋  阅读(271)  评论(0编辑  收藏  举报