控件扩展 - GridView分页及数据源为空
代码
/// <summary>
/// 重写分页,及数据源为空时显示表头
/// </summary>
public class GridviewExpand : System.Web.UI.WebControls.GridView
{
#region 扩展属性
/// <summary>
/// Gridview 分页是否重写
/// </summary>
public ThisPagerType ExpendPagerType
{
get
{
return (ViewState["PagerType"] != null ? (ThisPagerType)ViewState["PagerType"] : ThisPagerType.ChangeStyle);
}
set
{
ViewState["PagerType"] = value;
}
}
/// <summary>
/// 数据源为空时,是否显示表头(true:显示)
/// </summary>
public Boolean ExpendEmptyHeader
{
get
{
return _enableEmptyContentRender;
}
set
{
_enableEmptyContentRender = value;
}
}
public enum ThisPagerType
{
//样式不变
Regular = 0,
//样式变化
ChangeStyle = 1
}
#endregion
/// <summary>
/// 重写InitializePager 添加想要的样式
/// </summary>
/// <param name="row"></param>
/// <param name="columnSpan"></param>
/// <param name="pagedDataSource">数据源</param>
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
if (ExpendPagerType == ThisPagerType.Regular)
{
//如果样式是Regular,即不为扩展样式
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
TableCell cell_1 = InitPageCell(pagedDataSource);
row.Cells.Add(cell_1);
row.Cells[0].ColumnSpan = Columns.Count;
row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
this.Controls[0].Controls.AddAt(0, row);
}
}
#region TabCell 分页单元格样式:记录数:1~10/30 页数:1/2 上一页 下一页 转到 __ 页
//填写跳转到多少页
TextBox page = new TextBox();
//链接
LinkButton PageTo = new LinkButton();
#region 分页信息生成
/// <summary>
/// 记录数:1~10/22
/// </summary>
/// <param name="rowCount"></param>
/// <returns></returns>
private Label RecordInfo(int rowCount)
{
Label label = new Label();
int currentPageFirstRow = ((PageIndex * PageSize) + 1);
int currentPageLastRow = 0;
int lastPageRemainder = rowCount % PageSize;
if (lastPageRemainder == 0)
{
lastPageRemainder = PageSize;
}
currentPageLastRow = (PageCount == PageIndex + 1) ? (currentPageFirstRow + lastPageRemainder - 1) : (currentPageFirstRow + PageSize - 1);
label.Text = String.Format("记录数: {0}~{1}/{2} ", currentPageFirstRow, currentPageLastRow, rowCount);
return label;
}
/// <summary>
/// 页数:1/10
/// </summary>
/// <returns></returns>
private Label PageInfo()
{
Label pageInfo = new Label();
pageInfo.Text = "页数: " + (PageIndex + 1).ToString() + "/" + PageCount.ToString() + " ";
return pageInfo;
}
/// <summary>
/// 导航按键【首页 上一页 下一页 末页】
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private LinkButton NavigateLink(NavigateType type)
{
LinkButton button = new LinkButton();
switch (type)
{
case NavigateType.first:
{
}
break;
case NavigateType.prev:
{
button.Text = "上一页";
button.CommandArgument = string.Format("{0}", (PageIndex - 1));
button.Enabled = (PageIndex > 0);
}
break;
case NavigateType.next:
{
button.Text = "下一页";
button.CommandArgument = string.Format("{0}", (PageIndex + 1));
button.Enabled = (PageIndex < (PageCount - 1));
}
break;
case NavigateType.last:
{
}
break;
}
button.Click += new EventHandler(navigate_Click);
return button;
}
private enum NavigateType
{
first,
prev,
next,
last
}
#endregion
#region 跳转事件
protected virtual void navigate_Click(object sender, EventArgs e)
{
OnPageIndexChanging(new GridViewPageEventArgs(int.Parse(((LinkButton)sender).CommandArgument)));
}
//跳转到第几页
protected virtual void PageTo_Click(object sender, EventArgs e)
{
if (page.Text.Trim() == "")
{
page.Text = "0";
}
else
{
try
{
int.Parse(page.Text.Trim());
}
catch (Exception ex)
{
page.Text = "0";
}
}
if (int.Parse(page.Text.Trim()) < 1)
{
page.Text = "0";
}
else
{
int num = int.Parse(page.Text.Trim());
num--;
page.Text = num.ToString();
}
PageTo.CommandArgument = page.Text.Trim();
OnPageIndexChanging(new GridViewPageEventArgs(int.Parse(((LinkButton)sender).CommandArgument)));
//矫正显示页数
if (int.Parse(page.Text.Trim()) < 1)
{
page.Text = "1";
}
else if (int.Parse(page.Text.Trim()) > PageCount)
{
page.Text = PageCount.ToString();
}
else
{
page.Text = (PageIndex + 1).ToString();
}
}
#endregion
/// <summary>
/// 跳转文本框 样式为 pagetxt
/// </summary>
/// <param name="pagedDataSource"></param>
/// <returns></returns>
protected TableCell InitPageCell(PagedDataSource pagedDataSource)
{
//分页单元格
TableCell cell_1;
#region 设置属性
//记录数 1~2/3
Label recordinfo = RecordInfo(pagedDataSource.DataSourceCount);
//页数 1/10
Label pageinfo = PageInfo();
//上一页
LinkButton prev = NavigateLink(NavigateType.prev);
//下一页
LinkButton next = NavigateLink(NavigateType.next);
//转到 __ 页
PageTo.Text = "转到";
PageTo.Click += new System.EventHandler(PageTo_Click);
page.Attributes.Add("class", "pagetxt");
page.Attributes.Add("style", "width:20px");
Label pagelabel = new Label();
pagelabel.Text = "页";
#endregion
#region 设置位置
cell_1 = new TableCell();
//记录数
cell_1.Controls.Add(recordinfo);
//页数
cell_1.Controls.Add(pageinfo);
//上一页
cell_1.Controls.Add(prev);
//间隔
cell_1.Controls.Add(new LiteralControl(" "));
//下一页
cell_1.Controls.Add(next);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(PageTo);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(page);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(pagelabel);
#endregion;
return cell_1;
}
#endregion
#region 数据源为空时
private Boolean _enableEmptyContentRender = true;
/// <summary>
/// 为空时输出内容
/// </summary>
/// <param name="writer"></param>
protected virtual void RenderEmptyContent(System.Web.UI.HtmlTextWriter writer)
{
Table table = new Table();
table.CopyBaseAttributes(this);
#region 表头TR : 限制表头中无控件,隐藏列HeaderText需="";
//行 tr
TableRow tr = new TableRow();
//显示原有表头th
foreach (System.Web.UI.WebControls.DataControlField field in this.Columns)
{
//lms中隐藏列的表头为空
if (field.HeaderText != "")
{
System.Web.UI.WebControls.TableHeaderCell cell = new System.Web.UI.WebControls.TableHeaderCell();
cell.Text = field.HeaderText;
tr.Cells.Add(cell);
}
}
table.Rows.Add(tr);
#endregion
#region 内容行,样式 empty
//为空时 信息
TableRow row = new TableRow();
System.Web.UI.WebControls.TableCell msgCell = new System.Web.UI.WebControls.TableCell();
if (this.EmptyDataTemplate != null)
{
this.EmptyDataTemplate.InstantiateIn(msgCell);
}
else
{
this.EmptyDataText = "暂无相关信息";//td
msgCell.Text = this.EmptyDataText;
}
table.Rows.Add(row);
msgCell.CssClass = "empty";
msgCell.ColumnSpan = this.Columns.Count;
row.Cells.Add(msgCell);
#endregion
table.CssClass = this.CssClass;//样式的继承
table.RenderControl(writer);
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this._enableEmptyContentRender == true && (this.Rows.Count == 0 || this.Rows[0].RowType == System.Web.UI.WebControls.DataControlRowType.EmptyDataRow))
{
RenderEmptyContent(writer);
}
else
{
base.Render(writer);
}
}
#endregion
}
/// 重写分页,及数据源为空时显示表头
/// </summary>
public class GridviewExpand : System.Web.UI.WebControls.GridView
{
#region 扩展属性
/// <summary>
/// Gridview 分页是否重写
/// </summary>
public ThisPagerType ExpendPagerType
{
get
{
return (ViewState["PagerType"] != null ? (ThisPagerType)ViewState["PagerType"] : ThisPagerType.ChangeStyle);
}
set
{
ViewState["PagerType"] = value;
}
}
/// <summary>
/// 数据源为空时,是否显示表头(true:显示)
/// </summary>
public Boolean ExpendEmptyHeader
{
get
{
return _enableEmptyContentRender;
}
set
{
_enableEmptyContentRender = value;
}
}
public enum ThisPagerType
{
//样式不变
Regular = 0,
//样式变化
ChangeStyle = 1
}
#endregion
/// <summary>
/// 重写InitializePager 添加想要的样式
/// </summary>
/// <param name="row"></param>
/// <param name="columnSpan"></param>
/// <param name="pagedDataSource">数据源</param>
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
if (ExpendPagerType == ThisPagerType.Regular)
{
//如果样式是Regular,即不为扩展样式
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
TableCell cell_1 = InitPageCell(pagedDataSource);
row.Cells.Add(cell_1);
row.Cells[0].ColumnSpan = Columns.Count;
row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
this.Controls[0].Controls.AddAt(0, row);
}
}
#region TabCell 分页单元格样式:记录数:1~10/30 页数:1/2 上一页 下一页 转到 __ 页
//填写跳转到多少页
TextBox page = new TextBox();
//链接
LinkButton PageTo = new LinkButton();
#region 分页信息生成
/// <summary>
/// 记录数:1~10/22
/// </summary>
/// <param name="rowCount"></param>
/// <returns></returns>
private Label RecordInfo(int rowCount)
{
Label label = new Label();
int currentPageFirstRow = ((PageIndex * PageSize) + 1);
int currentPageLastRow = 0;
int lastPageRemainder = rowCount % PageSize;
if (lastPageRemainder == 0)
{
lastPageRemainder = PageSize;
}
currentPageLastRow = (PageCount == PageIndex + 1) ? (currentPageFirstRow + lastPageRemainder - 1) : (currentPageFirstRow + PageSize - 1);
label.Text = String.Format("记录数: {0}~{1}/{2} ", currentPageFirstRow, currentPageLastRow, rowCount);
return label;
}
/// <summary>
/// 页数:1/10
/// </summary>
/// <returns></returns>
private Label PageInfo()
{
Label pageInfo = new Label();
pageInfo.Text = "页数: " + (PageIndex + 1).ToString() + "/" + PageCount.ToString() + " ";
return pageInfo;
}
/// <summary>
/// 导航按键【首页 上一页 下一页 末页】
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private LinkButton NavigateLink(NavigateType type)
{
LinkButton button = new LinkButton();
switch (type)
{
case NavigateType.first:
{
}
break;
case NavigateType.prev:
{
button.Text = "上一页";
button.CommandArgument = string.Format("{0}", (PageIndex - 1));
button.Enabled = (PageIndex > 0);
}
break;
case NavigateType.next:
{
button.Text = "下一页";
button.CommandArgument = string.Format("{0}", (PageIndex + 1));
button.Enabled = (PageIndex < (PageCount - 1));
}
break;
case NavigateType.last:
{
}
break;
}
button.Click += new EventHandler(navigate_Click);
return button;
}
private enum NavigateType
{
first,
prev,
next,
last
}
#endregion
#region 跳转事件
protected virtual void navigate_Click(object sender, EventArgs e)
{
OnPageIndexChanging(new GridViewPageEventArgs(int.Parse(((LinkButton)sender).CommandArgument)));
}
//跳转到第几页
protected virtual void PageTo_Click(object sender, EventArgs e)
{
if (page.Text.Trim() == "")
{
page.Text = "0";
}
else
{
try
{
int.Parse(page.Text.Trim());
}
catch (Exception ex)
{
page.Text = "0";
}
}
if (int.Parse(page.Text.Trim()) < 1)
{
page.Text = "0";
}
else
{
int num = int.Parse(page.Text.Trim());
num--;
page.Text = num.ToString();
}
PageTo.CommandArgument = page.Text.Trim();
OnPageIndexChanging(new GridViewPageEventArgs(int.Parse(((LinkButton)sender).CommandArgument)));
//矫正显示页数
if (int.Parse(page.Text.Trim()) < 1)
{
page.Text = "1";
}
else if (int.Parse(page.Text.Trim()) > PageCount)
{
page.Text = PageCount.ToString();
}
else
{
page.Text = (PageIndex + 1).ToString();
}
}
#endregion
/// <summary>
/// 跳转文本框 样式为 pagetxt
/// </summary>
/// <param name="pagedDataSource"></param>
/// <returns></returns>
protected TableCell InitPageCell(PagedDataSource pagedDataSource)
{
//分页单元格
TableCell cell_1;
#region 设置属性
//记录数 1~2/3
Label recordinfo = RecordInfo(pagedDataSource.DataSourceCount);
//页数 1/10
Label pageinfo = PageInfo();
//上一页
LinkButton prev = NavigateLink(NavigateType.prev);
//下一页
LinkButton next = NavigateLink(NavigateType.next);
//转到 __ 页
PageTo.Text = "转到";
PageTo.Click += new System.EventHandler(PageTo_Click);
page.Attributes.Add("class", "pagetxt");
page.Attributes.Add("style", "width:20px");
Label pagelabel = new Label();
pagelabel.Text = "页";
#endregion
#region 设置位置
cell_1 = new TableCell();
//记录数
cell_1.Controls.Add(recordinfo);
//页数
cell_1.Controls.Add(pageinfo);
//上一页
cell_1.Controls.Add(prev);
//间隔
cell_1.Controls.Add(new LiteralControl(" "));
//下一页
cell_1.Controls.Add(next);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(PageTo);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(page);
cell_1.Controls.Add(new LiteralControl(" "));
cell_1.Controls.Add(pagelabel);
#endregion;
return cell_1;
}
#endregion
#region 数据源为空时
private Boolean _enableEmptyContentRender = true;
/// <summary>
/// 为空时输出内容
/// </summary>
/// <param name="writer"></param>
protected virtual void RenderEmptyContent(System.Web.UI.HtmlTextWriter writer)
{
Table table = new Table();
table.CopyBaseAttributes(this);
#region 表头TR : 限制表头中无控件,隐藏列HeaderText需="";
//行 tr
TableRow tr = new TableRow();
//显示原有表头th
foreach (System.Web.UI.WebControls.DataControlField field in this.Columns)
{
//lms中隐藏列的表头为空
if (field.HeaderText != "")
{
System.Web.UI.WebControls.TableHeaderCell cell = new System.Web.UI.WebControls.TableHeaderCell();
cell.Text = field.HeaderText;
tr.Cells.Add(cell);
}
}
table.Rows.Add(tr);
#endregion
#region 内容行,样式 empty
//为空时 信息
TableRow row = new TableRow();
System.Web.UI.WebControls.TableCell msgCell = new System.Web.UI.WebControls.TableCell();
if (this.EmptyDataTemplate != null)
{
this.EmptyDataTemplate.InstantiateIn(msgCell);
}
else
{
this.EmptyDataText = "暂无相关信息";//td
msgCell.Text = this.EmptyDataText;
}
table.Rows.Add(row);
msgCell.CssClass = "empty";
msgCell.ColumnSpan = this.Columns.Count;
row.Cells.Add(msgCell);
#endregion
table.CssClass = this.CssClass;//样式的继承
table.RenderControl(writer);
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this._enableEmptyContentRender == true && (this.Rows.Count == 0 || this.Rows[0].RowType == System.Web.UI.WebControls.DataControlRowType.EmptyDataRow))
{
RenderEmptyContent(writer);
}
else
{
base.Render(writer);
}
}
#endregion
}
效果图如下
![]()

浙公网安备 33010602011771号