Repeater使用方法—基础数据绑定+多级嵌套「建议收藏」

Repeater使用方法—基础数据绑定+多级嵌套「建议收藏」一、基础数据绑定Repeater控件在编译后不会生成任何多余的代码,而GridView等编译后会生成table标签,这样对于页面的负担和UI样式影响方面,使用Repeater就会显得很有优势了。下面

大家好,又见面了,我是你们的朋友全栈君。

一、基础数据绑定

  Repeater控件在编译后不会生成任何多余的代码,而GridView等编译后会生成table标签,这样对于页面的负担和UI样式影响方面,使用Repeater就会显得很有优势了。下面简单说明一下Repeater绑定数据库的方法。

效果图:

Repeater使用方法---基础数据绑定+多级嵌套「建议收藏」

说明:只有男性可以执行删除功能。

前台代码如下:

<head runat="server"> <title>员工管理</title> <link href="staffCSS.css" rel="stylesheet" type="text/css" /> </head> <body> <form id="form1" runat="server"> <div class="divContent"> <div class="dtcss"> <p class="dt_p"> 编号</p> <p class="dt_p"> 姓名</p> <p class="dt_p"> 性别</p> <p class="dt_p"> 部门</p> <p class="dt_p"> 操作</p> </div> <asp:Repeater ID="repStaff" runat="server" OnItemCommand="repStaff_ItemCommand" onitemdatabound="repStaff_ItemDataBound"> <ItemTemplate> <p class="dt_p"> <asp:Label ID="lblID" runat="server" Text='<%#Eval("id")%>'></asp:Label></p> <p class="dt_p"> <asp:Label ID="lblName" runat="server" Text='<%#Eval("staffName")%>'></asp:Label></p> <p class="dt_p"> <asp:Label ID="lblSex" runat="server" Text='<%#Convert.ToBoolean(Eval("sex"))?"女":"男"%>'></asp:Label></p> <p class="dt_p"> <asp:Label ID="lblDepartment" runat="server" Text='<%#Eval("departmentName") %>'></asp:Label></p> <p class="dt_p"> <asp:LinkButton ID="update" CommandName="update" runat="server" PostBackUrl='<%#"ModefyStaff.aspx?id="+Eval("staffid")%>' Text="编辑"></asp:LinkButton> <asp:LinkButton ID="delete" CommandName="delete" runat="server" CommandArgument='<%#Eval("staffid") %>' OnClientClick="javascript:return confirm('确认删除此信息吗?')" Text="删除"></asp:LinkButton></p> </ItemTemplate> </asp:Repeater> </div> </form> </body>

其中staffCSS.css样式表如下:

body { text-align:center; } .divContent { width:700px; text-align:left; font-size:12px; } .divContent p:hover { background-color:Orange; } .dt_p { width:18%; float:left; height:20px; } .dtcss { background-color:Lime; width:100%; line-height:20px; height:20px; }

后台代码:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindStaff(); } } //绑定数据 private void BindStaff() { string connstr = "Data Source=.;Initial Catalog=RepeaterSummary;User ID=sa;Password=123456;"; SqlConnection conn = new SqlConnection(connstr); if (conn.State == System.Data.ConnectionState.Closed) conn.Open(); string sqlstr = @"select ROW_NUMBER() over(order by s.id) id,s.id as staffid,s.staffName,s.sex,d.departmentName from Staff s,Department d where s.departmentid=d.id"; SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn); DataSet ds = new DataSet(); sda.Fill(ds); ds.Dispose(); conn.Close(); if (ds != null) { this.repStaff.DataSource = ds; this.repStaff.DataBind(); } } //生成事件时触发 protected void repStaff_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName=="update") { //跳转至修改页面  } if (e.CommandName == "delete") { int id =Convert.ToInt32(e.CommandArgument); string connstr = "Data Source=.;Initial Catalog=RepeaterSummary;User ID=sa;Password=123456"; SqlConnection conn = new SqlConnection(connstr); if (conn.State==System.Data.ConnectionState.Closed) { conn.Open(); } string sqlstr = "delete from Staff where id=" + id; SqlCommand comm = new SqlCommand(sqlstr, conn); int delInt = comm.ExecuteNonQuery(); if (delInt > 0) BindStaff(); } } //数据绑定时触发 protected void repStaff_ItemDataBound(object sender, RepeaterItemEventArgs e) { Label lblsex = (Label)e.Item.FindControl("lblSex"); LinkButton lbupdate = (LinkButton)e.Item.FindControl("update"); LinkButton lbdelete = (LinkButton)e.Item.FindControl("delete"); if (lblsex!=null) { if (lblsex.Text.Trim() == "") { lbupdate.Visible = false; //lbdelete.Visible = false;  } } } }

—————————————————————————————忧郁的分隔符——————————————————————————————————————

二 、多级嵌套

  如果数据展示需要现实父子孙等多级关系,如图:

            Repeater使用方法---基础数据绑定+多级嵌套「建议收藏」

需要两个或多个Repeater嵌套使用,使用方法是:
1. 前台代码定义时,在父Repeater内部定义子Repeater,子Repeater内部定义孙Repeater。如代码:

<!-- 父Repeater开始 --> <asp:Repeater ID="parentRepeater" runat="server" OnItemDataBound="parentRepeater_ItemDataBound"> <ItemTemplate> <dl id="dlrepeater"> <dt> <%-- 可以在这里绑定父节点的ID,绑定子Repeater时,需要根据这个ID来查--%> <asp:HiddenField ID="hfid" runat="server" Value=' <%#Eval("id")%>' /> <asp:CheckBox ID="cbParent" runat="server" Text=' <%#Eval("MenuName")%>' onclick="javascript:FormSelectAll('form1','cbChild',this);" /> </dt> <!-- 子Repeater开始 --> <asp:Repeater ID="childRepeater" runat="server" OnItemDataBound="childRepeater_ItemDataBound"> <ItemTemplate> <dd> <%--同理,绑定子节点的ID,供孙子Repeater查询绑定时用--%> <asp:HiddenField ID="hfidchild" runat="server" Value=' <%#Eval("id")%>' /> <asp:CheckBox name="cbChild" ID="cbChild" runat="server" Text=' <%#Eval("MenuName")%>' CssClass="abcd" onclick="javascript:FormSelectAllGrant('form1','cbGrantchild',this);" /> </dd> <!-- 孙Repeater开始 --> <asp:Repeater ID="grantchildRepeater" runat="server"> <ItemTemplate> <dd> <asp:HiddenField ID="hfidgrantchild" runat="server" Value=' <%#Eval("id")%>' /> &nbsp;&nbsp;&nbsp;<asp:CheckBox name="cbGrantchild" ID="cbGrantchild" runat="server" Text=' <%#Eval("MenuName")%>' CssClass="abcd" /> </dd> </ItemTemplate> </asp:Repeater> <!-- 孙Repeater结束 --> </ItemTemplate> </asp:Repeater> <!-- 子Repeater结束 --> </dl> </ItemTemplate> </asp:Repeater> <!-- 父Repeater结束 -->

2. 绑定数据时,在父Repeater的ItemDataBound事件中绑定子Repeater,在子Repeater的ItemDataBound事件中绑定孙Repeater。如代码:

//绑定父Repeater时触发 protected void parentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HiddenField hf = (HiddenField)e.Item.FindControl("hfid"); Repeater rpchild = (Repeater)e.Item.FindControl("childRepeater"); if (hf != null || hf.ToString() != "") { int id = Convert.ToInt32(hf.Value); rpchild.DataSource = BLLmenu.GetMenuChild(id);//根据父节点id查询子节点  rpchild.DataBind(); } } } //绑定子Repeater时触发 protected void childRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HiddenField hf = (HiddenField)e.Item.FindControl("hfidchild"); Repeater rpgrantchild = (Repeater)e.Item.FindControl("grantchildRepeater"); if (hf != null || hf.ToString() != "") { int id = Convert.ToInt32(hf.Value); rpgrantchild.DataSource = BLLmenu.GetMenuChild(id);//根据父节点id查询子节点  rpgrantchild.DataBind(); } } }

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155463.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ecshop添加菜单以及权限分配

    ecshop添加菜单以及权限分配

  • 朴素贝叶斯(Naive Bayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器

    朴素贝叶斯(NaiveBayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器,以西瓜数据集3.0为训练集,对“测1”样本进行判别。

  • 外汇区块链内容平台_组建外汇交易工作室

    外汇区块链内容平台_组建外汇交易工作室在过去几年中,由区块链驱动的比特币对全球财务,特别是外汇行业产生了重大影响。这种创新的加密货币在全球范围内大肆挥霍,并成为头条新闻,很快就能感受到它的存在。虽然比特币很可能继续对外汇行业产生影响,但它实际上是锁定链,这种货币背后的技术,将对外汇行业产生更显着和不可逆转的影响。外汇产业的当前景观外汇市场是全球最大,最具流动性的市场。该行业每周五天,每天24小时开放,主要位于伦敦,而纽约市的每日营…

  • Qt:emit是个什么?

    Qt:emit是个什么?槽机制例子中有用到过emit这个关键词也在注释中进行了详细解释这里总结一下emit是Qt中的关键字也是个宏。表示“发出”,后面所带的信号以类似广播形式发送出去。感兴趣的接受者会关注这个信号。…

  • 对话框皮肤(地下城皮肤怎么获得)

     
    设置圆角对话框:(网上说在onsize中做,我还没有尝试,目前写在OnInitDialog里面了)
    CRectrect;
    GetWindowRect(&rect);
    CRgnreg;
    reg.CreateRoundRectRgn(reg.left,reg.top,rgn.width(),rgn.Height());
    SetWindowRgn(rgn,true);
     设置窗体启动时的大小:
    SetWindo

  • npm 安装yarn

    Yarn是Facebook最近发布的一款依赖包安装工具。Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管理工具快速安装//在NPM中安装npminstall-gyarnMacOS在Mac上安装比较方便,使用初始化脚本即可 1 curl-o–Lhttps://yarnpkg.com/install.sh|ba…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号