asp.net的GridView通用分页程序(Oracle)

分页是数据库类的重要程序之一, 分页对于大数据量的往往需要用到存贮过程。这个研究网上也有不少,而本文的则是普通的SQL语句的分页程序。Oracle的操作在.net下不同与MS SQL,所以使用的是DataSet填充GridView来实现。程序包含通常使用的功能:

Oracle驱动为微软提供的,可以参考前面几篇文章获取完整说明。

1 分页
2 首页,上一页,下一页,尾页,第?页,共?页,记录数 跳转功能
3 页面显示的隔行不同色,并且提供了鼠标经过时当前行变化颜色的功能
4 选择某一列
5 删除选定列,并提示确认删除信息
6 更新选定列
7 对列进行排序(升/降)

运行效果图:不能贴图,所拷贝了一下,效果不是很好,但是大体上可以看明白了。
<script type="text/javascript"> </script>
  
  EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILPHONE_NUMBERHIRE_DATEJOB_IDSALARYCOMMISSION_PCTMANAGER_IDDEPARTMENT_ID
Edit Select删除 100StevenKingSKING515.123.45671987-6-17 0:00:00AD_PRES24000  90
Edit Select删除 101NeenaKochharNKOCHHAR515.123.45681989-9-21 0:00:00AD_VP17000 10090
Edit Select删除 102LexDe HaanLDEHAAN515.123.45691993-1-13 0:00:00AD_VP17000 10090
Edit Select删除 103AlexanderHunoldAHUNOLD590.423.45671990-1-3 0:00:00IT_PROG9000 10260
Edit Select删除 104BruceErnstBERNST590.423.45681991-5-21 0:00:00IT_PROG6000 10360
Edit Select删除 105DavidAustinDAUSTIN590.423.45691997-6-25 0:00:00IT_PROG4800 10360
Edit Select删除 106ValliPataballaVPATABAL590.423.45601998-2-5 0:00:00IT_PROG4800 10360
Edit Select删除 107DianaLorentzDLORENTZ590.423.55671999-2-7 0:00:00IT_PROG4200 10360
Edit Select删除 108NancyGreenbergNGREENBE515.124.45691994-8-17 0:00:00FI_MGR12000 101100
Edit Select删除 109DanielFavietDFAVIET515.124.41691994-8-16 0:00:00FI_ACCOUNT9000 108100
首页 上一页 下一页 尾页 第 1 页 共 11 页 总共 107 条 跳转
建立过程如下:
新建页面:
添加相关的GridView控件和LinkButton等。
我的GridView选择AllowPaging = true(允许分页); AllowSort = true(允许排序);<AlternatingRowStyle BackColor="LightSteelBlue" />(行颜色切换);AutoGenerateColumns=true(自动产生列表);等等
详细的可以参考下面的代码部分。比如添加AutoGenerateSelect,AutoGenerateEdit,AutoGenerateDelete等。
这里的AutoGenerateDelete方式有部分改变,你可以参考代码修改。然后就是添加相应的事件进行处理,在cs文件里可以参考。

文中的Javascript是用来鼠标经过该记录时高亮显示以示区别的。

<% @ Page Language = " C# "  AutoEventWireup = " true "   CodeFile = " Default.aspx.cs "  Inherits = " _Default "   %>

<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< script language = " javascript "  type = " text/javascript " >
    
if  ( ! objbeforeItem)
    
{
    var objbeforeItem
=null;
    var objbeforeItembackgroundColor
=null;
    }

    function ItemOver(obj)
    
{
    
if(objbeforeItem)
    
{
    objbeforeItem.style.backgroundColor 
= objbeforeItembackgroundColor;
    }

    objbeforeItembackgroundColor 
= obj.style.backgroundColor;
    objbeforeItem 
= obj;
    obj.style.backgroundColor 
= "#FF8000";
    }
 
</ script >

< html xmlns = " http://www.w3.org/1999/xhtml "   >

< head runat = " server " >
    
< title > 分页测试程序 </ title >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
        
& nbsp; & nbsp;
        
< asp:GridView ID = " GridView1 "  runat = " server "  AllowPaging = " True "  AllowSorting = " True "  OnSorting = " GridView1_Sorting "  AutoGenerateEditButton = " True "  OnRowCancelingEdit = " GridView1_RowCancelingEdit "  OnRowEditing = " GridView1_RowEditing "  OnRowUpdating = " GridView1_RowUpdating "  AutoGenerateSelectButton = " True "  OnRowDataBound = " GridView1_RowDataBound "   OnSelectedIndexChanging = " GridView1_SelectedIndexChanging "  OnRowDeleting = " GridView1_RowDeleting " >
            
< AlternatingRowStyle BackColor = " LightSteelBlue "   />
            
< PagerSettings Visible = " False "   />
            
< Columns >
                
< asp:TemplateField ShowHeader = " False " >
                    
< ItemTemplate >
                        
< asp:LinkButton ID = " LnkbtnDel "  runat = " server "  CommandName = " Delete "  Text = " 删除 "  OnClientClick = " return confirm('确认要删除吗?'); "  Width = " 40px " ></ asp:LinkButton >
                    
</ ItemTemplate >
                
</ asp:TemplateField >
            
</ Columns >
        
</ asp:GridView >
        
< asp:LinkButton ID = " lnkbtnFirst "  runat = " server "  OnClick = " PagerButtonClick " > 首页 </ asp:LinkButton >< asp:LinkButton ID = " lnkbtnPre "  runat = " server "  OnClick = " PagerButtonClick " > 上一页 </ asp:LinkButton >
        
< asp:LinkButton ID = " lnkbtnNext "  runat = " server "  OnClick = " PagerButtonClick " > 下一页 </ asp:LinkButton >
        
< asp:LinkButton ID = " lnkbtnLast "  runat = " server "  OnClick = " PagerButtonClick " > 尾页 </ asp:LinkButton >
        
< asp:Label ID = " lblCurrentIndex "  runat = " server "  Text = " 第?页 " ></ asp:Label >
        
< asp:Label ID = " lblPageCount "  runat = " server "  Text = " 共?页 " ></ asp:Label >
        
< asp:Label ID = " lblRecordCount "  runat = " server "  Text = " 记录数 " ></ asp:Label >
        
< asp:TextBox ID = " txtJumpPage "  runat = " server "  Width = " 24px " > 1 </ asp:TextBox >
        
< asp:LinkButton ID = " lnkbtnJumpPage "  runat = " server "  OnClick = " lnkbtnJumpPage_Click "   > 跳转 </ asp:LinkButton ></ div >
    
</ form >
</ body >
</ html >


2 处理程序部分:
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;

using  System.Data.OracleClient;



public   partial   class  _Default : System.Web.UI.Page 
{

    
protected void Page_Load(object sender, EventArgs e)
    
{

        
if (!IsPostBack)
        
{
            fillGridView();
        }


    }


    
/// <summary>
    
/// 填充GridView
    
/// </summary>

    protected void fillGridView()
    
{
        DataSet ds 
= new DataSet();

        ds 
= GetData();
        
// 将ds作为GridView的数据源

        GridView1.DataSource 
= ds;

        
// 绑定数据
        GridView1.DataBind();

        getRefSet(ds);

    }


    
/// <summary>
    
/// 分页的相关参数设置
    
/// </summary>
    
/// <param name="ds"></param>

    protected void getRefSet(DataSet ds)
    
{
        lblCurrentIndex.Text 
= "第 " + (GridView1.PageIndex + 1).ToString() + " 页";
        lblPageCount.Text 
= "共 " + GridView1.PageCount.ToString() + " 页";
        lblRecordCount.Text 
= "总共 " + ds.Tables[0].Rows.Count.ToString() + " 条";

        
if (ds.Tables[0].Rows.Count == 0)
        
{
            lnkbtnFirst.Visible 
= false;
            lnkbtnPre.Visible 
= false;
            lnkbtnNext.Visible 
= false;
            lnkbtnLast.Visible 
= false;

            lblCurrentIndex.Visible 
= false;
            lblPageCount.Visible 
= false;
            lblRecordCount.Visible 
= false;
        }

        
else if (GridView1.PageCount == 1)
        
{
            lnkbtnFirst.Visible 
= false;
            lnkbtnPre.Visible 
= false;
            lnkbtnNext.Visible 
= false;
            lnkbtnLast.Visible 
= false;
        }


        
// 设置LinkButton此时对应的参数
        lnkbtnFirst.CommandArgument = "1";
        lnkbtnPre.CommandArgument 
= (GridView1.PageIndex == 0 ? "1" : GridView1.PageIndex.ToString());
        lnkbtnNext.CommandArgument 
= (GridView1.PageCount == 1 ? GridView1.PageCount.ToString() : (GridView1.PageIndex + 2).ToString());
        lnkbtnLast.CommandArgument 
= GridView1.PageCount.ToString(); 

    }


    
/// <summary>
    
/// 跳转到指定页面,页面参数由txtJumpPage获取
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void lnkbtnJumpPage_Click(object sender, EventArgs e)
    
{
        
// 减1 是因为系统默认首页的PageIndex为0,为了符合人们的正常思维而使用
        GridView1.PageIndex = int.Parse(txtJumpPage.Text) - 1;

        
// 更新当前页面显示值
        lblCurrentIndex.Text = "第 " + (GridView1.PageIndex + 1).ToString() + " 页";

        
// 重新绑定
        fillGridView();
        GridView1.DataBind();

    }


    
/// <summary>
    
/// 首页,上一页,下一页,尾页公用的点击程序
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void PagerButtonClick(object sender, EventArgs e)
    
{
        
// CommandArgument对应该对象在页面初始化后的设定值
        GridView1.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandArgument) - 1;

        fillGridView();
        GridView1.DataBind();

    }


    
/// <summary>
    
/// 设置排序方式
    
/// </summary>

    public SortDirection GridViewSortDirection
    
{

        
get
        
{

            
if (ViewState["sortDirection"== null)
            
{

                ViewState[
"sortDirection"= SortDirection.Ascending;
            }


            
return (SortDirection)ViewState["sortDirection"];

        }


        
set { ViewState["sortDirection"= value; }

    }


    
/// <summary>
    
/// 排序
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    
{
        
string sortExpression = e.SortExpression;

        
// 必须有一个空格"Desc"不行
        string Desc = " Desc";
        
string Asc = " Asc";

        
if (GridViewSortDirection == SortDirection.Ascending)
        
{

            GridViewSortDirection 
= SortDirection.Descending;

            SortGridView(sortExpression,Desc);

        }


        
else
        
{

            GridViewSortDirection 
= SortDirection.Ascending;

            SortGridView(sortExpression, Asc);

        }
 
    }


    
/// <summary>
    
/// 排序
    
/// </summary>
    
/// <param name="sortExpression"></param>
    
/// <param name="direction">排序方式</param>

    private void SortGridView(string sortExpression, string direction)
    
{
        
        DataTable dt 
= GetData().Tables[0];

        DataView dv 
= new DataView(dt);

        dv.Sort 
= sortExpression + direction;

        GridView1.DataSource 
= dv;

        GridView1.DataBind();

    }


    
/// <summary>
    
/// 转换SQL查询结果为DataSet
    
/// </summary>
    
/// <returns>ds</returns>

    private DataSet GetData()
    
{

        OracleConnection conn 
= new OracleConnection("Data Source=INFOPLAT;User ID=system;Password=manager;");

        OracleCommand cmd 
= new OracleCommand();

        cmd.Connection 
= conn;
        String strSql 
= "select * from hr.employees";
        cmd.CommandText 
= strSql;

        cmd.CommandType 
= CommandType.Text;
        
// 创建数据集
        DataSet ds = new DataSet();
        
try
        
{
            conn.Open();

            
// 创建适配器
            OracleDataAdapter ad = new OracleDataAdapter();

            
// 适配器命令
            ad.SelectCommand = cmd;

            
// 填充到数据集(DataSet)

            ad.Fill(ds);

        }

        
catch (Exception ex)
        
{
            Response.Write(
"数据库错误,错误原因:" + ex.Message);
            Response.End();
        }

        
finally
        
{
            
// 释放占有资源
            conn.Close();
        }


        
return ds;

    }


    
/// <summary>
    
/// 编辑行
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    
{
        GridView1.EditIndex 
= e.NewEditIndex;

        fillGridView();
        GridView1.DataBind();
    }


    
/// <summary>
    
/// 取消更新
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    
{
        GridView1.EditIndex 
= -1;

        fillGridView();
        GridView1.DataBind();
    }


    
/// <summary>
    
/// 更新
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    
{
        
// Cells[2]是因为前面有2列,并且最好需要id为主键。
        string id = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;

        
string newtxt = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

        
string strSql1 = "UPDATE hr.employees SET first_name ='" + newtxt + "' WHERE employee_id =" + id;
        
        OracleConnection conn 
= new OracleConnection("Data Source=INFOPLAT;User ID=system;Password=manager;");

        OracleCommand cmd 
= new OracleCommand();

        cmd.CommandText 
= strSql1;
        cmd.CommandType 
= CommandType.Text;

        cmd.Connection 
= conn;
        conn.Open();
        cmd.ExecuteNonQuery();

        conn.Close();

        GridView1.EditIndex 
= -1;

        fillGridView();
        GridView1.DataBind();
    }



    
/// <summary>
    
/// 鼠标经过时改变当前行的颜色
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        // 调用javascript
            e.Row.Attributes[
"onmouseover"= "ItemOver(this)";

   }


    
/// <summary>
    
/// 选择行
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    
{
        
// Cells[2]是因为前面有2列,并且最好需要id为主键。
        string id = GridView1.Rows[e.NewSelectedIndex].Cells[2].Text;
        
        Response.Write(id);
        
// 自己的处理代码

        fillGridView();
        GridView1.DataBind();

    }


    
/// <summary>
    
/// 删除行
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    
{
        
// Cells[2]是因为前面有2列,并且最好需要id为主键。
        string id = GridView1.Rows[e.RowIndex].Cells[2].Text;

        
string strSql1 = "DELETE FROM hr.employees WHERE employee_id =" + id;

        OracleConnection conn 
= new OracleConnection("Data Source=INFOPLAT;User ID=system;Password=manager;");

        OracleCommand cmd 
= new OracleCommand();

        cmd.CommandText 
= strSql1;
        cmd.CommandType 
= CommandType.Text;

        cmd.Connection 
= conn;
        conn.Open();
        
try
        
{
            cmd.ExecuteNonQuery();
        }

        
catch (Exception ex)
        
{

        }

        
finally
        
{
            conn.Close();
        }


        GridView1.EditIndex 
= -1;

        fillGridView();
        GridView1.DataBind();
    }


}


测试通过。
使用其他表查询时只要更换SQL语句即可。

对于鼠标悬停时可以用如下代码修改而不需要上面的javascript:

        //当鼠标移到的时候设置该行颜色为"", 并保存原来的背景颜色
        e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='#FF8000'");
        //当鼠标移走时还原该行的背景色
        e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor");

     /// <summary>
    
/// 鼠标经过时改变当前行的颜色
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

     protected   void  GridView1_RowDataBound( object  sender, GridViewRowEventArgs e)
    
{
        
//当鼠标移到的时候设置该行颜色为"", 并保存原来的背景颜色
        e.Row.Attributes.Add("onmouseover""currentcolor=this.style.backgroundColor;this.style.backgroundColor='#FF8000'");
        
//当鼠标移走时还原该行的背景色
        e.Row.Attributes.Add("onmouseout""this.style.backgroundColor=currentcolor");
   }


当然程序还有很多不足,但是这个也是我的一个测试程序。大家继续改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值