using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Fanfajin.MyWebControls
{
/// <summary>
/// 增强的 GridView 控件 扩展
/// </summary>
[DefaultProperty("SelectedValue")]
[ToolboxData("<{0}:MyGridView runat=server></{0}:MyGridView>")]
public sealed class MyGridView : System.Web.UI.WebControls.GridView
{
公开属性成员
/// <summary>
/// When using GridView in certain ways the SortDirection and SortExpression
/// properties are sometimes left blank or never changed. When using this control,
/// the Alt properties remedy this situation.
/// </summary>
/// <param name="e"></param>
protected override void OnSorting(GridViewSortEventArgs e)
{
//Handle setting up of sorting info
if (!String.IsNullOrEmpty(this.SortExpression))
{
SortExpressionAlt = e.SortExpression;
SortDirectionAlt = e.SortDirection;
}
else
{
if (SortExpressionAlt == e.SortExpression)
{
if (SortDirectionAlt == SortDirection.Ascending)
{
SortDirectionAlt = SortDirection.Descending;
}
else
{
SortDirectionAlt = SortDirection.Ascending;
}
}
else
{
SortDirectionAlt = SortDirection.Ascending;
}
this.SortExpressionAlt = e.SortExpression;
}
base.OnSorting(e);
}
初始化在分页功能启用时显示的页导航行。
/// <summary>
/// 呈现 GridView 控件之前,必须先为该控件中的每一行创建一个 GridViewRow 对象。
/// 在创建 GridView 控件中的每一行时,将引发 RowCreated 事件。这使您可以提供一个这样的事件处理方法,
/// 即每次发生此事件时都执行一个自定义例程(如在行中添加自定义内容)。
/// </summary>
/// <param name="e"></param>
protected override void OnRowCreated(GridViewRowEventArgs e)
{
//给继承者的说明 在派生类中重写 OnRowCreated 时,一定要调用基类的 OnRowCreated 方法,以便已注册的委托对事件进行接收。
base.OnRowCreated(e);
if (e.Row.RowType == DataControlRowType.DataRow)
{
//If row selection is enabled then add mouse over scripts to enable on client.
if (IsOpenMouseOverColor)
{
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = '" + this.MouseOverColor + "';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = '" + this.MouseOutColor + "';");
}
}
else if (e.Row.RowType == DataControlRowType.Header && IsShowSortDirectionImg)
{
foreach (TableCell headerCell in e.Row.Cells)
{
if (headerCell.HasControls())
{
AddSortImageToHeaderCell(headerCell);
}
}
}
}
//Header中加入排序的图片
private void AddSortImageToHeaderCell(TableCell headerCell)
{
// 查出headerCell中的 linkButton
LinkButton lnk = (LinkButton)headerCell.Controls[0];
if (lnk != null)
{
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
// 设置图片的URL
img.ImageUrl = (this.SortDirectionAlt == SortDirection.Ascending ? this.SortAscImageUrl : this.SortDescImageUrl);
// 如果用户选择了排序,则加入排序图片
if (this.SortExpressionAlt == lnk.CommandArgument)
{
//加入一个空格
headerCell.Controls.Add(new LiteralControl(" "));
headerCell.Controls.Add(img);
}
}
}
}
/// <summary>
/// 分页导航条扩展
/// </summary>
class ExtendGridViewPagerTemplate : ITemplate
{
私有成员
构造函数
/// <summary>
/// 对象初始化时调用
/// </summary>
/// <param name="container"></param>
public void InstantiateIn(Control container)
{
if (_PageInfoShowLeft)
{
createPageInfo(container);
createSpacer(container);
}
createFirstLinkButtion(container);//首页
createSpacer(container);//空格
createPrevLinkButton(container);//上页
createSpacer(container);
numericBar(container);//数字导航条
createSpacer(container);
createNextLinkButton(container);//下页
createSpacer(container);
createLastLinkButtion(container);//尾页
if (!_PageInfoShowLeft)
{
createPageInfo(container);
createSpacer(container);
}
}
//成生空格
private void createSpacer(Control container)
{
Literal spacer = new Literal();
spacer = new Literal();
spacer.Text = " ";
container.Controls.Add(spacer);
}
//生成首页按钮
private void createFirstLinkButtion(Control container)
{
if (_pageIndex > 0)
{
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _First;
pageButton.CommandName = "Page";
pageButton.CommandArgument = "1";
container.Controls.Add(pageButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _First + "</span>";
container.Controls.Add(temp);
}
}
//生成上一页按钮
private void createPrevLinkButton(Control container)
{
if (_pageIndex > 0)
{
LinkButton prevButton = new LinkButton();
prevButton.CommandName = "Page";
prevButton.CommandArgument = "Prev";
prevButton.Text = _Prev;
container.Controls.Add(prevButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Prev + "</span>";
container.Controls.Add(temp);
}
}
//生成下一页按钮
private void createNextLinkButton(Control container)
{
if (_pageIndex < _pageCount - 1 && _pageIndex >= 0)
{
LinkButton prevButton = new LinkButton();
prevButton.CommandName = "Page";
prevButton.CommandArgument = "Next";
prevButton.Text = _Next;
container.Controls.Add(prevButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Next + "</span>";
container.Controls.Add(temp);
}
}
//生成尾按钮
private void createLastLinkButtion(Control container)
{
if (_pageIndex < _pageCount - 1 && _pageIndex >= 0)
{
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _Last;
pageButton.CommandName = "Page";
pageButton.CommandArgument = _pageCount.ToString();
container.Controls.Add(pageButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Last + "</span>";
container.Controls.Add(temp);
}
}
//生成数字按钮
private void createNumericPageButton(Control container, int pageIndex, bool isSmatrPage)
{
string _text = (pageIndex + 1).ToString();
if (isSmatrPage)
{
_text = "<font color=\"" + this._SmartPageColor + "\">" + _text + "</font>";
}
if (pageIndex == _pageIndex)
{
_text = "<font color=\"" + this._CurrentPageColor + "\"><b>" + _text + "</b></font>";
}
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _text;
pageButton.CommandName = "Page";
pageButton.CommandArgument = (pageIndex + 1).ToString();
container.Controls.Add(pageButton);
}
private void numericBar(Control container)
{
跟据 _NumCount 计算出导航条的 起始位置与结束位置
输出前N页
输出正常数字
输出后N页
}
private void createPageInfo(Control container)
{
Literal pageinfo = new Literal();
pageinfo = new Literal();
pageinfo.Text = _PageInfo;
container.Controls.Add(pageinfo);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Fanfajin.MyWebControls
{
/// <summary>
/// 增强的 GridView 控件 扩展
/// </summary>
[DefaultProperty("SelectedValue")]
[ToolboxData("<{0}:MyGridView runat=server></{0}:MyGridView>")]
public sealed class MyGridView : System.Web.UI.WebControls.GridView
{
公开属性成员
/// <summary>
/// When using GridView in certain ways the SortDirection and SortExpression
/// properties are sometimes left blank or never changed. When using this control,
/// the Alt properties remedy this situation.
/// </summary>
/// <param name="e"></param>
protected override void OnSorting(GridViewSortEventArgs e)
{
//Handle setting up of sorting info
if (!String.IsNullOrEmpty(this.SortExpression))
{
SortExpressionAlt = e.SortExpression;
SortDirectionAlt = e.SortDirection;
}
else
{
if (SortExpressionAlt == e.SortExpression)
{
if (SortDirectionAlt == SortDirection.Ascending)
{
SortDirectionAlt = SortDirection.Descending;
}
else
{
SortDirectionAlt = SortDirection.Ascending;
}
}
else
{
SortDirectionAlt = SortDirection.Ascending;
}
this.SortExpressionAlt = e.SortExpression;
}
base.OnSorting(e);
}
初始化在分页功能启用时显示的页导航行。
/// <summary>
/// 呈现 GridView 控件之前,必须先为该控件中的每一行创建一个 GridViewRow 对象。
/// 在创建 GridView 控件中的每一行时,将引发 RowCreated 事件。这使您可以提供一个这样的事件处理方法,
/// 即每次发生此事件时都执行一个自定义例程(如在行中添加自定义内容)。
/// </summary>
/// <param name="e"></param>
protected override void OnRowCreated(GridViewRowEventArgs e)
{
//给继承者的说明 在派生类中重写 OnRowCreated 时,一定要调用基类的 OnRowCreated 方法,以便已注册的委托对事件进行接收。
base.OnRowCreated(e);
if (e.Row.RowType == DataControlRowType.DataRow)
{
//If row selection is enabled then add mouse over scripts to enable on client.
if (IsOpenMouseOverColor)
{
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = '" + this.MouseOverColor + "';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = '" + this.MouseOutColor + "';");
}
}
else if (e.Row.RowType == DataControlRowType.Header && IsShowSortDirectionImg)
{
foreach (TableCell headerCell in e.Row.Cells)
{
if (headerCell.HasControls())
{
AddSortImageToHeaderCell(headerCell);
}
}
}
}
//Header中加入排序的图片
private void AddSortImageToHeaderCell(TableCell headerCell)
{
// 查出headerCell中的 linkButton
LinkButton lnk = (LinkButton)headerCell.Controls[0];
if (lnk != null)
{
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
// 设置图片的URL
img.ImageUrl = (this.SortDirectionAlt == SortDirection.Ascending ? this.SortAscImageUrl : this.SortDescImageUrl);
// 如果用户选择了排序,则加入排序图片
if (this.SortExpressionAlt == lnk.CommandArgument)
{
//加入一个空格
headerCell.Controls.Add(new LiteralControl(" "));
headerCell.Controls.Add(img);
}
}
}
}
/// <summary>
/// 分页导航条扩展
/// </summary>
class ExtendGridViewPagerTemplate : ITemplate
{
私有成员
构造函数
/// <summary>
/// 对象初始化时调用
/// </summary>
/// <param name="container"></param>
public void InstantiateIn(Control container)
{
if (_PageInfoShowLeft)
{
createPageInfo(container);
createSpacer(container);
}
createFirstLinkButtion(container);//首页
createSpacer(container);//空格
createPrevLinkButton(container);//上页
createSpacer(container);
numericBar(container);//数字导航条
createSpacer(container);
createNextLinkButton(container);//下页
createSpacer(container);
createLastLinkButtion(container);//尾页
if (!_PageInfoShowLeft)
{
createPageInfo(container);
createSpacer(container);
}
}
//成生空格
private void createSpacer(Control container)
{
Literal spacer = new Literal();
spacer = new Literal();
spacer.Text = " ";
container.Controls.Add(spacer);
}
//生成首页按钮
private void createFirstLinkButtion(Control container)
{
if (_pageIndex > 0)
{
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _First;
pageButton.CommandName = "Page";
pageButton.CommandArgument = "1";
container.Controls.Add(pageButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _First + "</span>";
container.Controls.Add(temp);
}
}
//生成上一页按钮
private void createPrevLinkButton(Control container)
{
if (_pageIndex > 0)
{
LinkButton prevButton = new LinkButton();
prevButton.CommandName = "Page";
prevButton.CommandArgument = "Prev";
prevButton.Text = _Prev;
container.Controls.Add(prevButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Prev + "</span>";
container.Controls.Add(temp);
}
}
//生成下一页按钮
private void createNextLinkButton(Control container)
{
if (_pageIndex < _pageCount - 1 && _pageIndex >= 0)
{
LinkButton prevButton = new LinkButton();
prevButton.CommandName = "Page";
prevButton.CommandArgument = "Next";
prevButton.Text = _Next;
container.Controls.Add(prevButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Next + "</span>";
container.Controls.Add(temp);
}
}
//生成尾按钮
private void createLastLinkButtion(Control container)
{
if (_pageIndex < _pageCount - 1 && _pageIndex >= 0)
{
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _Last;
pageButton.CommandName = "Page";
pageButton.CommandArgument = _pageCount.ToString();
container.Controls.Add(pageButton);
}
else
{
Literal temp = new Literal();
temp.Text = "<span disabled=true>" + _Last + "</span>";
container.Controls.Add(temp);
}
}
//生成数字按钮
private void createNumericPageButton(Control container, int pageIndex, bool isSmatrPage)
{
string _text = (pageIndex + 1).ToString();
if (isSmatrPage)
{
_text = "<font color=\"" + this._SmartPageColor + "\">" + _text + "</font>";
}
if (pageIndex == _pageIndex)
{
_text = "<font color=\"" + this._CurrentPageColor + "\"><b>" + _text + "</b></font>";
}
LinkButton pageButton;
pageButton = new LinkButton();
pageButton.Text = _text;
pageButton.CommandName = "Page";
pageButton.CommandArgument = (pageIndex + 1).ToString();
container.Controls.Add(pageButton);
}
private void numericBar(Control container)
{
跟据 _NumCount 计算出导航条的 起始位置与结束位置
输出前N页
输出正常数字
输出后N页
}
private void createPageInfo(Control container)
{
Literal pageinfo = new Literal();
pageinfo = new Literal();
pageinfo.Text = _PageInfo;
container.Controls.Add(pageinfo);
}
}
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["SelectCmd"] != null)
{
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["SelectCmd"] = "SELECT [tid], [fid], [iconid], [typeid] FROM [Forum_123_topics] where tid>10";
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
Response.Write(SqlDataSource1.SelectCommand);
}
protected void Button2_Click(object sender, EventArgs e)
{
ViewState["SelectCmd"] = "SELECT [tid], [fid], [iconid], [typeid] FROM [Forum_123_topics]";
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
Response.Write(SqlDataSource1.SelectCommand);
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["SelectCmd"] != null)
{
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["SelectCmd"] = "SELECT [tid], [fid], [iconid], [typeid] FROM [Forum_123_topics] where tid>10";
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
Response.Write(SqlDataSource1.SelectCommand);
}
protected void Button2_Click(object sender, EventArgs e)
{
ViewState["SelectCmd"] = "SELECT [tid], [fid], [iconid], [typeid] FROM [Forum_123_topics]";
SqlDataSource1.SelectCommand = (string)ViewState["SelectCmd"];
MyGridView1.DataBind();
Response.Write(SqlDataSource1.SelectCommand);
}
}