收录日期:2021/01/28 15:37:41 时间:2016/07/12 06:44:11 标签:C#
要求c#的用在web上,不用session和传值的那中。觉得分少了的可以用个100分。
引用楼主 zhoudan3986226 的帖子:
要求c#的用在web上,不用session和传值的那中。觉得分少了的可以用个100分。

在WEB上做什么?
  /// <summary>
    /// 在 GridView 控件中的某个行被绑定到一个数据记录时发生。此事件通常用于在某个行被绑定到数据时修改该行的内容。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        this.lblCurrentPage.Text = string.Format("当前第{0}页/总共{1}页", this.GridView1.PageIndex + 1, this.GridView1.PageCount); 

        //遍历所有行设置边框样式
        foreach (TableCell tc in e.Row.Cells)
        {
            tc.Attributes["style"] = "border-color:Black";
        }
        //用索引来取得编号
        if (e.Row.RowIndex != -1)
        {
            int id = GridView1.PageIndex * GridView1.PageSize + e.Row.RowIndex + 1;
            e.Row.Cells[0].Text = id.ToString();
        }
        
    }
    /// <summary>
    /// 重新绑定
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.GridView1.PageIndex = this.ddlCurrentPage.SelectedIndex;
        bind();
    }
    protected void lnkbtnFrist_Click(object sender, EventArgs e)
    {
        this.GridView1.PageIndex = 0;
        bind();
    }
    protected void lnkbtnPre_Click(object sender, EventArgs e)
    {
        if (this.GridView1.PageIndex > 0)
        {
            this.GridView1.PageIndex = this.GridView1.PageIndex - 1;
            bind();
        }
    }
    protected void lnkbtnNext_Click(object sender, EventArgs e)
    {
        if (this.GridView1.PageIndex < this.GridView1.PageCount)
        {
            this.GridView1.PageIndex = this.GridView1.PageIndex + 1;
            bind();
        }
    }
    protected void lnkbtnLast_Click(object sender, EventArgs e)
    {
        this.GridView1.PageIndex = this.GridView1.PageCount;
        bind();
    } 

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

namespace Component
{
    /// <summary>
    /// 分页控件
    /// </summary>
    public class CustomList : DataList
    {
        private int pageSize = 10;
        private int total;
        private IList dataSource;
        private string _PageCss = string.Empty;
        private int currPage;
        private string empty;
        private bool __IsShowHeader = true;
        private bool __IsShowFooder = true;

        public bool IsShowHeader
        {
            set { this.__IsShowHeader = value; }
        }
        public bool IsShowFooder
        {
            set { this.__IsShowFooder = value; }
        }
        public int PageSize
        {
            get { return this.pageSize; }
            set { this.pageSize = value; }
        }
        public string EmptyText
        {
            set { this.empty = value; }
        }
        public string PageCss
        {
            set { this._PageCss = value; }
        }

        protected override void OnLoad(EventArgs e)
        {
            if(this.Visible)
            {
                string page = Context.Request["page"];
                int index = (page != null) ? int.Parse(page) : 1;
                OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
            }
        }

        public event DataGridPageChangedEventHandler PageIndexChanged;
        protected virtual void OnPageIndexChanged(DataGridPageChangedEventArgs e)
        {
            if (PageIndexChanged != null)
                PageIndexChanged(this, e);
        }



        protected override void Render(HtmlTextWriter writer)
        { 
            if (this.total == 0)
            {
                //显示HeaderTemplate内容
                for (int i = 0; i < Controls.Count; i++)
                {
                    DataListItem dataitem = (DataListItem)this.Controls[i];
                    if ((dataitem.ItemType == ListItemType.Header && __IsShowHeader)
                             || (dataitem.ItemType == ListItemType.Footer && __IsShowFooder))
                    {
                        dataitem.RenderControl(writer);
                    }
                }
                //
                StringBuilder sb = new StringBuilder(500);
                sb.Append("<table width=100% cellspacing=0 cellpadding=0 class=table-css>");
                sb.Append("<tr><td class=\"td-nodata\">");
                sb.AppendFormat("<span class=Notice-Msg>&nbsp;&nbsp;{0}</span>", empty);
                sb.Append("</td></tr>");
                sb.Append("</table>");
                writer.Write(sb.ToString ());
                return;
            }
            
            base.Render(writer);

            //输出信息栏.
            writer.Write("<br/><div>");
            writer.Write("&nbsp;共有" + Convert.ToString(this.total) + "条信息,&nbsp;&nbsp;");
            writer.Write("每页" + Convert.ToString(this.pageSize) + "条,&nbsp;&nbsp;");
            writer.Write("页次:<font color=red><b>" + Convert.ToString(this.currPage) + "</b></font>");
            writer.Write("/");
            writer.Write(Convert.ToString(PageCount) + "页");
            writer.Write("&nbsp;&nbsp;&nbsp;&nbsp;");


            //准备输出页码组
            int firstnum, lastnum;
            if (currPage < 6)
            {
                firstnum = 1;
                lastnum = 6;
                if (lastnum > PageCount) lastnum = PageCount;
            }
            else
            {
                firstnum = currPage - 3;
                lastnum = currPage + 3;
                if (lastnum > PageCount) lastnum = currPage;
            }

            string pageName = Context.Request.Path;
            string query = Context.Request.Url.Query.Replace("?", "&");
            Regex reg = new Regex(@"^&page=\d+",RegexOptions.Compiled);
            query = reg.Replace(query, string.Empty);

            //到首页
            writer.Write(string.Format("<a href={0}?page=1{1}><<</a>&nbsp;", pageName, query));

            //输出页码组
            for (int i = firstnum; i <= lastnum; i++)
                writer.Write(string.Format("<a href={0}?page=" + i.ToString() + "{1}>" + i.ToString() + "</a>&nbsp;", pageName, query));

            //到最终页
            writer.Write(string.Format("<a href={0}?page=" + PageCount + "{1}>>></a>&nbsp;", pageName, query));
            writer.Write("&nbsp;");

            //输入上一页
            if (currPage == 1)
                writer.Write("已是第一页");
            if (currPage > 1)
                writer.Write(string.Format("<a href={0}?page={1}{2}>上页</a>", pageName, (currPage - 1), query));
            writer.Write("&nbsp;");
            //输出下一页
            if (currPage + 1 > PageCount)
                writer.Write("已是最后页");
            if (currPage < PageCount)
                writer.Write(string.Format("<a href={0}?page={1}{2}>下页</a>", pageName, (currPage + 1), query));

            writer.Write("</div>");
        }
        public override object DataSource
        {
            set
            {
                dataSource = (IList) value;

                //判断是否有记录
                if (dataSource != null)
                    this.total = dataSource.Count;
                else
                    this.total = 0;
                try
                {
                    string page = Context.Request["page"];
                    int index = (page != null) ? int.Parse(page) : 1;
                    currPage = index;
                }
                catch
                {
                }
            }
        }
        protected override void OnDataBinding(EventArgs e)
        {
            if (CurrentPageIndex == 0) CurrentPageIndex = 1;
            int start = (CurrentPageIndex - 1) * pageSize;
            int size = Math.Min(pageSize, total - start);
            IList page = new ArrayList();
            for (int i = 0; i < size; i++)
                page.Add(dataSource[start + i]);

            base.DataSource = page;
            base.OnDataBinding(e);
        }
        /// <summary>
        /// 当前页
        /// </summary>
        public int CurrentPageIndex
        {
            get { return currPage; }
            set { currPage = value; }
        }
        /// <summary>
        /// 总页数
        /// </summary>
        protected int PageCount
        {
            get
            {
                if (total % pageSize == 0)
                    return total / pageSize;
                else
                    return (total / pageSize) + 1;
            }
        }

    }
}


http://blog.csdn.net/gisfarmer/archive/2009/02/12/3882935.aspx
web上的DataGrid分页方法很多,包括直接使用分页控件,更方便
给你来个存储过程

CREATE PROCEDURE GetRecordFromPage 
    @tblName      varchar(255),      -- 表名 
    @fldName      varchar(255),      -- 字段名 
    @PageSize    int = 10,          -- 页尺寸 
    @PageIndex    int = 1,            -- 页码 
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序 
    @strWhere    varchar(2000) = ''  -- 查询条件 (注意: 不要加 where) 
AS 

declare @strSQL  varchar(6000)      -- 主语句 
declare @strTmp  varchar(1000)      -- 临时变量 
declare @strOrder varchar(500)        -- 排序类型 

if @OrderType != 0 
begin 
    set @strTmp = ' <(select min' 
    set @strOrder = ' order by [' + @fldName + '] desc' 
end 
else 
begin 
    set @strTmp = '>(select max' 
    set @strOrder = ' order by [' + @fldName +'] asc' 
end 

set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
    + @strOrder 

if @strWhere != '' 
    set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' 
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder 

if @PageIndex = 1 
begin 
    set @strTmp = '' 
    if @strWhere != '' 
        set @strTmp = ' where (' + @strWhere + ')' 

    set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
        + @tblName + ']' + @strTmp + ' ' + @strOrder 
end 

exec (@strSQL)
GO

引用 3 楼 flying_net 的回复:
C# code
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

namespace Component
{
    /// <summary>
    /// 分页控件
    /// </summary>
    public class CustomList : DataList
    {
        private int pageSize = 10;
        private int total;
   …

不能有传值!
引用 6 楼 devilli 的回复:
给你来个存储过程 

SQL code
CREATE PROCEDURE GetRecordFromPage 
    @tblName      varchar(255),      -- 表名 
    @fldName      varchar(255),      -- 字段名 
    @PageSize    int = 10,          -- 页尺寸 
    @PageIndex    int = 1,            -- 页码 
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序 
    @strWhere    varchar(2000) = ''  -- 查询条件 (注意: 不要加 wher…

看不懂
我在说下条件好了
不用session或cookie
不用传值的形式来确定当前页面
不用分页控件
有效率的话更好啦(记录有100万)

你有理想吗?你理想是否在日渐退色与萎缩?不要在红尘中迷失自我 怎么样取出mysql中某月份的记录? 急,一个钟后结贴 统计柱状表 小弟初学C#,请教高手~ 三年.net 工程师 工作问题咨询 82岁怎么了,我也非主流 SQL 用[]和不用的区别 c#如何打开一个被其他进程正在使用的文件并改写之 chmod 4755的问题 cc攻击,他在忽悠我吗 cc攻击,他在忽悠我吗 绝对原创,关于手机辐射的详解,上过高中的都来看看吧! Struts中Text标签中赋值问题 c#问题 Hibernate执行SQL发生的情况! 泛型数据输入到Excel Hibernate执行SQL发生的情况! 获取鼠标坐标时被控件阻挡 socket编程 对消息进行校验 初学Struts1.2 validator验证框架无效 arm S3c2410 上面的 linux 在哪里下载啊 ??? 关于数据的对比 关于Word书签的一句代码,求助. 哪里有用C++写的用于教学的简单操作系统示例? cxgrid 某一列等于另外两列相除 软件二次开发 软件二次开发 TpagecontrolEx 一个你调试不到的错误; 关于MFC动态控件ID的问题