Repeater嵌套Repeater绑定数据

前台代码

 <!--注意层级关系不要写错了-->
<asp:Repeater ID="rpGroup" runat="server"
onitemdatabound="rpGroup_ItemDataBound">
<HeaderTemplate>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
</HeaderTemplate>
<ItemTemplate>
<tr>
<th>

<%#(int)Eval("groupNo")+1%>
批次
</th>
<th>金额:<label id="lblSumMoney" runat="server" ><%#Eval("SaleOrderMoneySum")%></label></th>
<th>单数:<label id="lblSumSaleOrder" runat="server" ><%#Eval("SaleOrderDzSum")%></label></th>
</tr>
<tr>
<th style="width: 8%">
销售单号
</th>
<th style="width: 13%">
客户名称
</th> </tr>
<asp:Repeater ID="rpSaleOrderDz" runat="server">
<ItemTemplate>
<tr>
<td align="center">
<%#Eval("saleOrderCode")%>
</td>
<td align="center">
<%#Eval("sellerName")%>
</td> </tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

在PageLoad事件中,加载外层Repeter数据

 protected void Page_Load(object sender, EventArgs e)
{
var datas = JsonConvert.DeserializeObject<List<ResponseViewSaleOrderDzLstModel>>(strJson);
rpGroup.DataSource = datas;
rpGroup.DataBind();
}

最后一步根据外层绑定的数据找到对应的内层数据

后台代码:这块需要绑定外层Repeater的ItemDataBound事件

 //网上资料用到了DataRowView我这里没用到直接绑定了数据集
protected void rpGroup_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("rpSaleOrderDz") as Repeater;//找到里层的repeater对象
//DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项
//int groupNo = Convert.ToInt32(rowv["qtid"]); //获取组号
rep.DataSource = datas[e.Item.ItemIndex].datas;//datas[groupNo].datas;
rep.DataBind();
}
}

Repeater获取HeaderTemplate、FooterTemplate中的控件

Repeater中FooterTemplate并无FindControl方法,也无法将FooterTemplate转成RepeaterItem,

虽然在Repeater的ItemDataBound事件中,RepeaterItemEventArgs参数用if (e.Item.ItemType == ListItemType.Footer)可判别出这个Footer,但其他时候不行。

可通过如下代码进行文本的赋值:

<label ID="rep2Sum" runat="server" />

((HtmlGenericControl)rep2.Controls[rep2.Controls.Count - ].FindControl("rep2Sum")).Text = ss.ToString(); 

同理HeaderTemplate:

((HtmlGenericControl)rep2.Controls[0].FindControl("rep2Sum")).Text = ss.ToString(); 

Repeater实现行上下移动

前端

<asp:Repeater ID="rpNews" runat="server" OnItemCommand="rpNews_ItemCommand" OnItemDataBound="rpNews_ItemDataBound">
<ItemTemplate>
<tr>
<td><%#Eval("menu_name") %></td>
<td><%#Eval("menu_url") %>
<asp:HiddenField ID="zindex" runat="server" Value=<%# Container.ItemIndex%> />
</td>
<td class="gradeX">
<a class="btn btn-primary" href="UpDateMenu.aspx?action=update&oid=<%# Eval("OID") %>&menuName=<%# Eval("menu_name") %>">修改</a>
<a ID="btnDelete" href="MenuHandler.ashx?action=delete&oid=<%# Eval("OID") %>" OnClick="return IsConfirmDelete();" class="btn btn-primary">删除</a>
<asp:LinkButton runat="server" ID="linkUp" CommandArgument='<%# Eval("OID") %>' CommandName='<%# Eval("menuorder") %>' OnClick="lbUp_Click" Text="上移" CssClass="btn btn-primary"></asp:LinkButton>
<asp:LinkButton runat="server" ID="linkDown" CommandArgument='<%# Eval("OID") %>' Text="下移" CommandName='<%# Eval("menuorder") %>' OnClick="lbDown_Click" CssClass="btn btn-primary"></asp:LinkButton>

</td>
</tr>
</ItemTemplate>
</asp:Repeater>

后端:

     public int datacount = ;
protected void rpNews_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
LinkButton linkUp = e.Item.FindControl("linkUp") as LinkButton;
LinkButton linkDown = e.Item.FindControl("linkDown") as LinkButton;
if (e.Item.ItemIndex == )
{
linkUp.Enabled = false;
}
if (e.Item.ItemIndex == datacount - )
{
linkDown.Enabled = false;
}
}
}
protected void lbUp_Click(object sender, EventArgs e)
{
MenuUCService uc = new MenuUCService();
LinkButton btn = (LinkButton)sender;
HiddenField hf = (HiddenField)btn.NamingContainer.FindControl("zindex");
        //先修改自己在修改其他
StringBuilder strSql = new StringBuilder();
//拿到当前行的上一行的Link数据
LinkButton linkCurrentRow = (LinkButton)rpNews.Items[int.Parse(hf.Value)].FindControl("linkUp");
if (!uc.CheckCurrentRowValueRange(linkCurrentRow))
{
return;
}
LinkButton linkUpRow = (LinkButton)rpNews.Items[int.Parse(hf.Value) - ].FindControl("linkUp"); //得到的menuorder-oid
strSql.Append("update USR_ALLMENU set menuorder='" + linkUpRow.CommandName + "' where OID='" + linkCurrentRow.CommandArgument + "';");
strSql.Append("update USR_ALLMENU set menuorder='" + linkCurrentRow.CommandName + "' where OID='" + linkUpRow.CommandArgument + "';");
       //重新绑定数据 }
    
protected void lbDown_Click(object sender, EventArgs e)
{
MenuUCService uc = new MenuUCService();
LinkButton btn = (LinkButton)sender;
HiddenField hf = (HiddenField)btn.NamingContainer.FindControl("zindex");
LinkButton linkCurrentRow = (LinkButton)rpNews.Items[int.Parse(hf.Value)].FindControl("linkDown");
if (!uc.CheckCurrentRowValueRange(linkCurrentRow))
{
return;
}
LinkButton linkDown = (LinkButton)rpNews.Items[int.Parse(hf.Value) + ].FindControl("linkDown");
StringBuilder strSql = new StringBuilder();
strSql.Append("update USR_ALLMENU set menuorder='" + linkDown.CommandName + "' where OID='" + linkCurrentRow.CommandArgument + "';");
strSql.Append("update USR_ALLMENU set menuorder='" + linkCurrentRow.CommandName + "' where OID='" + linkDown.CommandArgument + "';");
        //重新绑定数据 }

原理:找到相邻行,然后获取ID和排序方式,然后修改

参考自:http://www.cnblogs.com/webapi/p/5718445.html

Repeater控件使用小结持续更新的更多相关文章

  1. Repeater控件用法

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx. ...

  2. Repeater控件使用中的一些小问题

    网页上用来展示列表的数据,发现还是Repeater比GridView,DetailView之类的要灵活些,所以近期用到了就总结下遇到的一些情况,保留下来以备之后查阅,不用现问度娘了... 自己摸索的, ...

  3. asp.net学习之Repeater控件

    asp.net学习之Repeater控件 文章摘自:http://www.cnblogs.com/shipfi/archive/2009/10/19/1585703.html Repeater控件和D ...

  4. Asp.net Repeater控件

    Repeater控件和DataList控件,可以用来一次显示一组数据项.比如,可以用它们显示一个数据表中的所有行.     Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输出 ...

  5. asp:Repeater控件使用

    Repeater控件和DataList控件,可以用来一次显示一组数据项.比如,可以用它们显示一个数据表中的所有行. Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输出格式.D ...

  6. C#控件之Repeater控件使用

    歡迎大家來討論,修改,一定虛心接受. 1.為什麼使用Repeater控件? 關於把從數據庫讀取的數據綁定到前台頁面,我們可以使用DataGrid.DataGridView以及Repeater來佈局,三 ...

  7. Repeater控件的

    http://blog.csdn.net/zhang_xinxiu/article/details/21872433 想起来,公司的aspx页面前台数据展示除了datagrid以为还有Repeater ...

  8. ASP.Net中通过Jquery前端对Repeater控件绑定的数据进行操作

    说明:由于Repeater控件是动态绑定,通过Id获取数据只能默认获取第一行: 1.对Repeater中div设置样式 2.通过$(".css").each(function(){ ...

  9. Repeater 控件

    Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功能,这意味着用户必须通过创建模板来提供 Repeater 控件的布局.当网页 ...

随机推荐

  1. equal height

    https://css-tricks.com/the-perfect-fluid-width-layout/ http://nicolasgallagher.com/multiple-backgrou ...

  2. in 与 exist , not in 与 not exist

    in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的. 如果查询的两个 ...

  3. matlab中的@函数

    原文链接:http://blog.sina.com.cn/s/blog_5e73a8fc0100t9yg.html 这是个函数句柄 @(x,y) 表示未知数是x和y punct     - Funct ...

  4. css3的过滤效果

    上面的图片就是css3新特性的滤镜效果,学会了这些那么我们这群爱美爱帅的大web是不是就可以完美的用代码实现照片美化了捏~~ 好,咱们先把照片后面的白框实现, <style> #div1{ ...

  5. CorelDRAW X8官方正版特惠下载

    CorelDRAW X8自发布以来,价格居高不下,这也使一众忠粉望而却步,之前看过CorelDRAW做活动,都是X6\X7这些比较早的版本,比较新的版本也没做什么优惠,不过还好看了一下,CorelDR ...

  6. ZBrush中的PolyPainting如何理解?

    什么是PolyPainting? PolyPainting在ZBrush ®中是一种创建纹理的方法,该方法通过对每个多边形顶点应用单一RGB值来着色模型.此方法无需使用UV坐标.通过直接对顶点应用颜色 ...

  7. 如何在vue里面正确的引用 jquery 和 第三方插件

    vue-cli webpack全局引入jquery(jq通过npm安装的并非本地文件) 1.首先在package.json里加入, dependencies:{ "jquery" ...

  8. 【转】linux 增加用户 useradd 用法小结及配置文件说明

    原文地址:https://blog.csdn.net/warden2010/article/details/5132290 在Linux 系统中,所有的用户和组像一个国家.如果国家要繁荣昌盛的话,需要 ...

  9. c++ socket C/S通信实例

    具体的实例连接: 客户端项目连接:http://pan.baidu.com/s/1c2MndTI 服务端项目连接:http://pan.baidu.com/s/1i4DFkFV 用vs2013打开,服 ...

  10. 仅前端cookie之记住密码

    参考文章给忘了...,我就在他基础上修改了一些,但至于安全性,我没弄md5,所以安全系数应该为0 <!DOCTYPE html> <html lang="en"& ...