.net自定义分页实现以及没有任何数据时保留表头
2011-11-09 09:56
471 查看
前台:
<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>
跳转到:
<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
}
}
相关文章推荐
- 自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
- 自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
- GridView分页的实现以及自定义分页样式功能实例
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- Sql Server 2000,Sql Server 2005以及Oracle下如何实现数据分页
- EasyUI Datagrid 分页的情况下实现点击表头的小三角图标对数据库中所有数据重新排序
- Spring与SpringMVC整合,以及实现数据库数据的增删查改和分页操作
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听
- jquery将数据以table的形式显示,实现数据统计,分页,以及动态添加,搜索
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- Android利用TrafficStats类实现监测手机网速功能,以及double数据小数点后保留2位
- JDBC实现数据库的几种基本操作(查询,分页查询,根据关键字进行查询以及插入数据)
- 运用数据库来实现数据分页以及搜索问题
- GridView分页的实现以及自定义分页样式功能实例
- WPF DataGrid自定义分页控件_实现下拉刷新数据
- Silverlight - 没有RIA Services时使用Data Pager实现服务端数据分页
- 自定义ExpandableListView以及实现其分页
- php从PostgreSQL 数据库检索数据,实现分页显示以及根据条件查找数据
- GridView分页的实现以及自定义分页样式功能实例