您的位置:首页 > 数据库 > Oracle

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

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

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

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

运行效果图:不能贴图,所拷贝了一下,效果不是很好,但是大体上可以看明白了。

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILPHONE_NUMBERHIRE_DATEJOB_IDSALARYCOMMISSION_PCTMANAGER_IDDEPARTMENT_ID
Edit Select删除 100StevenKingSKING515.123.45671987-6-17 0:00:00AD_PRES2400090
Edit Select删除 101NeenaKochharNKOCHHAR515.123.45681989-9-21 0:00:00AD_VP1700010090
Edit Select删除 102LexDe HaanLDEHAAN515.123.45691993-1-13 0:00:00AD_VP1700010090
Edit Select删除 103AlexanderHunoldAHUNOLD590.423.45671990-1-3 0:00:00IT_PROG900010260
Edit Select删除 104BruceErnstBERNST590.423.45681991-5-21 0:00:00IT_PROG600010360
Edit Select删除 105DavidAustinDAUSTIN590.423.45691997-6-25 0:00:00IT_PROG480010360
Edit Select删除 106ValliPataballaVPATABAL590.423.45601998-2-5 0:00:00IT_PROG480010360
Edit Select删除 107DianaLorentzDLORENTZ590.423.55671999-2-7 0:00:00IT_PROG420010360
Edit Select删除 108NancyGreenbergNGREENBE515.124.45691994-8-17 0:00:00FI_MGR12000101100
Edit Select删除 109DanielFavietDFAVIET515.124.41691994-8-16 0:00:00FI_ACCOUNT9000108100
首页上一页 下一页 尾页 第 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>


  


<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");


}

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息