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

最新文章

  1. rnandroid环境搭建
  2. javascript运动系列第六篇——轨迹和投掷
  3. 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
  4. oracle和mysql获取当前时间的不同
  5. PHP开发环境配置
  6. [git] ignore文件规则失效
  7. C# 类的访问修改符
  8. struts2中错误处理
  9. 用一行代码初始化ArrayList
  10. Connection to https://dl-ssl.google.com refused 解决方案
  11. 使用repeater控件显示列表替代treeview
  12. [Angular 2] Using ng-for to repeat template elements
  13. node to traverse cannot be null!
  14. scala map
  15. Java 开发中如何正确踩坑
  16. js字符串转换为数字 总结
  17. linux安装lamp环境(linux+apache+mysql+php)
  18. python 网络编程之TCP传输&amp;粘包传输
  19. 基于react可无限向内部添加节点的tree
  20. 5款Python程序员高频使用开发工具推荐

热门文章

  1. JDBC连接MySQL数据库(一)——数据库的基本连接
  2. websocket 进阶!netty框架实现websocket达到高并发
  3. 路飞学城Python-Day142
  4. python笔记4----字典
  5. Python基础学习_01修改代码所属作者
  6. GDI 直线和折线(6)
  7. 小结ajax中的同源和跨域 jsonp和cors
  8. Project Euler 26 Reciprocal cycles( 分数循环节 )
  9. nyoj92-图像有用区域【BFS】
  10. Python3爬虫环境配置