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;
            }
        }
    }
}

C#列表页面后台代码的更多相关文章

  1. js回掉页面后台代码-简单demo

    后台代码: public partial class WebForm1 : System.Web.UI.Page, ICallbackEventHandler { protected void Pag ...

  2. WPF页面后台代码InitializeComponent()报错

    InitializeComponent(); 报错: 查看对应的前台xaml文件中,主标签中是否缺失引用: x:class="命名空间.类名"

  3. 使用Xamarin开发移动应用示例——数独游戏(八)使用MVVM实现完成游戏列表页面

    项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 前面我们已经完成了游戏的大部分功能,玩家可以玩预制的数独游戏,也可以自己添加 ...

  4. 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)

    说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...

  5. vue3,后台管理列表页面各组件之间的状态关系

    技术栈 vite2 vue 3.0.5 vue-router 4.0.6 vue-data-state 0.1.1 element-plus 1.0.2-beta.39 前情回顾 表单控件 查询控件 ...

  6. asp.net 点击按钮,页面没有任何变化,后台代码不触发

    asp.net 点击按钮,页面没有任何变化,后台代码不触发 和可能是 asp.net button  缺少validationGroup 导致的,需要查看页面的validation并且让他们抛出错误信 ...

  7. 向SharePoint页面添加后台代码

    转:http://www.cnblogs.com/chenzehe/archive/2009/12/25/1631863.html 在本文中,我将跟大家一起讨论,为MOSS的页面添加服务器端代码的另一 ...

  8. 为sharepoint的内部页面添加后台代码

    我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...

  9. 客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值。

    客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值.     无论是什么的html控件,只要加上了runat="server" ...

随机推荐

  1. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  2. Educational Codeforces Round 8

    开始填坑_(:з」∠)_ 628A - Tennis Tournament    20171124 小学数学题,\((x,y)=((n-1)\cdot(2b+1),np)\) #include< ...

  3. swust oj 1014

    交换排序算法的设计与实现——冒泡排序 1000(ms) 10000(kb) 2640 / 7503 编程实现冒泡排序,按照非递减排序,测试数据为整数. 输入 第一行是待排序数据元素的个数: 第二行是待 ...

  4. freemarker导出带图片的word文档

    最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性 这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台 ...

  5. sql server xp_cmdshell 过程中报错原因

    1.net use 连接目标服务器是报错: 发生系统错误 53.找不到网络路径 可能原因是:主机装防护软件 比如 360 金山毒霸等阻止了cmd.exe程序. 将cmd.exe权限改成管理员(属性&g ...

  6. 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)

    在上一篇博客中,我们主要介绍了四种查找的方法,包括顺序查找.折半查找.插入查找以及Fibonacci查找.上面这几种查找方式都是基于线性表的查找方式,今天博客中我们来介绍一下基于二叉树结构的查找,也就 ...

  7. 中文转拼音without CJK

    Xamarin写Android程序时,通常要使用按中文首字母分组显示(如通讯录) . 于是需要被迫包含CJK,不过包含后包肯定是会变大的,于是....自己写了一个硬枚举的中文转拼音的类. 原理是这样的 ...

  8. 1.5 A better alternative thing: React Native

    In 2015, React Native (RN) was born. At that time, few people paid attention to it because it was st ...

  9. iOS URL Schemes与漏洞的碰撞组合

    iOS URL Schemes与漏洞的碰撞组合 前言 iOS URL Schemes,这个单词对于大多数人来说可能有些陌生,但是类似下面这张图的提示大部分人应该都经常看见: 今天要探究的就是:了解iO ...

  10. [Swift]LeetCode462. 最少移动次数使数组元素相等 II | Minimum Moves to Equal Array Elements II

    Given a non-empty integer array, find the minimum number of moves required to make all array element ...