using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Oracle.ManagedDataAccess.Client;
public partial class Page_Index : System.Web.UI.Page
{
DBService db = new DBService();
OracleConn conn = new OracleConn();
private int id = 0; //保存指定行操作所在的ID號
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//設置當前頁的索引
int pageIndex = 1;
try
{
//獲取當前索要跳轉頁的索引號
pageIndex = Convert.ToInt32(Request.QueryString["Page"]);
//如果是第0頁將會跳轉入第1頁
if (pageIndex <= 0)
{
pageIndex = 1;
}
}
catch
{
pageIndex = 1;
}
DataTable dt = this.GetDataTable(); //獲取綁定的數據表
PagedDataSource pds = new PagedDataSource(); //創建分頁數據源對象
pds.DataSource = dt.DefaultView; //為數據源對象設置數據源
pds.AllowPaging = true; //對象允許分頁
pds.PageSize = 2; //設置對象每頁顯示的大小
pds.CurrentPageIndex = pageIndex - 1; //設置數據源的當前頁
//向Repeater控制項上綁定分頁數據源控制項
this.Repeater1.DataSource = pds;
this.Repeater1.DataBind();
//使用Literal標簽來動態指定每個標簽跳轉頁的鏈接
ltlPageBar.Text = this.GetPageBar(pds);
}
}
/// <summary>
/// 將數據源綁定Repeater控制項上
/// </summary>
private void DataBindToRepeater()
{
OracleCommand cmd = conn.GetData();
this.Repeater1.DataSource = cmd.ExecuteReader(); //為Repeater對象指定數據源
this.Repeater1.DataBind(); //綁定數據源
}
/// <summary>
/// 獲取每個標簽上的跳轉頁的鏈接地址
/// </summary>
/// <param name="pds">分頁數據源對象</param>
/// <returns>分頁操作按鈕的html文本</returns>
private string GetPageBar(PagedDataSource pds)
{
string pageBar = string.Empty; //聲明頁面標簽文本
int currentPageIndex = pds.CurrentPageIndex + 1; //獲取當前頁索引
//判斷首頁的鏈接頁面
if (currentPageIndex == 1) //如果該頁為第一頁,則證明它為首頁
{
pageBar += "<a href=\"javascript:void(0)\">首頁</a>";
}
else
{
//如果不是首頁,首頁鏈接的地址將會為1
pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=1\">首頁</a>";
}
//判斷上一頁鏈接的地址
if ((currentPageIndex - 1) < 1) //如果上一頁小於1則鏈接到第一頁
{
pageBar += "<a href=\"javascript:void(0)\">上一頁</a>";
}
else
{
//如果上一頁地址不是1將會鏈接到上一頁
pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + (currentPageIndex - 1) + "\">上一頁</a>";
}
//指定下一頁的鏈接地址
if ((currentPageIndex + 1) > pds.PageCount)
{
//如果下一頁的地址大於總頁數,將會連接到首頁
pageBar += "<a href=\"javascript:void(0)\">下一頁</a>";
}
else
{
//否則的話鏈接到下一頁
pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + (currentPageIndex + 1) + "\">下一頁</a>";
}
//指定末頁的鏈接地址
if (currentPageIndex == pds.PageCount)
{
pageBar += "<a href=\"javascript:void(0)\">末頁</a>";
}
else
{
pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + pds.PageCount + "\">末頁</a>";
}
return pageBar; //返回html文本
}
/// <summary>
/// 獲取數據源,重新鏈接數據
/// </summary>
/// <returns>DataTable,數據源</returns>
private DataTable GetDataTable()
{
DataTable dt = new DataTable(); //創建資料庫表
dt = conn.GetTableData();
return dt;
}
private void GetDataBind()
{
Repeater1.DataSource = conn.GetTableData();
Repeater1.DataBind();
}
protected void btnConnect_Click(object sender, EventArgs e)
{
OracleConn conn = new OracleConn();
int result = conn.GetConn();
if (result == 1)
{
Response.Write("連接成功!");
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
Response.Redirect("Add.aspx");
}
protected void btnGetData_Click(object sender, EventArgs e)
{
//查詢數據點擊事件
GetDataBind();
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
//獲取命令文本,判斷發出的命令為何種類型,根據命令類型調用事件
if (e.CommandName == "Edit") //編輯命令
{
id = int.Parse(e.CommandArgument.ToString()); //獲取命令ID號
}
else if (e.CommandName == "Cancel") //取消更新命令
{
id = -1;
}
else if (e.CommandName == "Delete") //刪除行內容命令
{
id = int.Parse(e.CommandArgument.ToString()); //獲取刪除行的ID號
//刪除選定的行,並重新指定綁定操作
this.DeleteRepeater(id);
}
else if (e.CommandName == "Update") //更新行內容命令
{
//獲取更新行的內容和ID號
string strText = ((TextBox)e.Item.FindControl("txtName")).Text.Trim();
int intId = int.Parse(((Label)e.Item.FindControl("lblID")).Text);
//更新Repeater控制項的內容
this.UpdateRepeater(intId,strText);
}
//重新綁定控制項上的內容
this.DataBindToRepeater();
}
/// <summary>
/// 刪除行內容
/// </summary>
/// <param name="intId">刪除行所在內容的ID</param>
private void DeleteRepeater(int intId)
{
conn.DeleteData(intId);
}
/// <summary>
/// 更新Repeater控制項中的內容
/// </summary>
/// <param name="strText">修改後的內容</param>
/// <param name="intId">內容所在行的ID號</param>
private void UpdateRepeater( int intId,string strText)
{
conn.UpdateData(intId,strText);
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//判斷Repeater控制項中的數據是否是綁定的數據源,如果是的話將會驗證是否進行了編輯操作
//ListItemType 枚舉表示在一個列表控制項可以包括,例如 DataGrid、 DataList和 Repeater 控制項的不同項目。
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//獲取綁定的數據源,這裡要註意上面使用sqlReader的方法來綁定數據源,所以下麵使用的DbDataRecord方法獲取的
//如果綁定數據源是DataTable類型的使用下麵的語句就會報錯.
//System.Data.Common.DbDataRecord record = (System.Data.Common.DbDataRecord)e.Item.DataItem;
//DataTable類型的數據源驗證方式
System.Data.DataRowView record = (DataRowView)e.Item.DataItem;
//判斷數據源的id是否等於現在的id,如果相等的話證明現點擊了編輯觸發了userRepeat_ItemCommand事件
if (id == int.Parse(record["id"].ToString()))
{
((Panel)e.Item.FindControl("plItem")).Visible = false;
((Panel)e.Item.FindControl("plEdit")).Visible = true;
}
else
{
((Panel)e.Item.FindControl("plItem")).Visible = true;
((Panel)e.Item.FindControl("plEdit")).Visible = false;
}
}
}
}