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 
= "&nbsp;";
            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);
    }

}
posted on 2007-08-21 22:14  蓝色爬虫  阅读(503)  评论(0编辑  收藏  举报