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. hdu1317 XYZZY Floyd + Bellman_Ford

    这题,我在学搜索的时候做过.不过好像不叫这名字. 1.先用Floyd算法判断图的连通性.如果1与n是不连通的,输出hopeless. 2.用Bellman_Ford算法判断是否有正圈,如果某点有正圈, ...

  2. hdu1829 A Bug's Life 基础种类并查集

    题目的大意可以理解为:A爱B,B爱C ……给出一系列爱恋的关系,推断有没有同性恋. 思路是把相同性别的归为一个集合(等价类),异性的异性为同性. #include<iostream> #i ...

  3. 决策树构建算法之—C4.5

    这个网站值得收藏一下,原文链接:http://shiyanjun.cn/archives/428.html 决策树算法的优越性在于:离散学习算法进行组合总可以表达任意复杂的布尔函数,并不受数据集的限制 ...

  4. MVC 入口

    1.在 Global.asax public class MvcApplication : System.Web.HttpApplication { protected void Applicatio ...

  5. [POI2005]AUT-The Bus 树状数组维护最大前缀和

    #include<cstdio> #include<algorithm> using namespace std; const int N=100000+3; int x[N] ...

  6. JSCH实现文件上传下载至sftp服务器

    文件服务器采用FreeSSHd,文件服务器配置就不细说了. 直接上代码,该代码可以直接使用. import com.jcraft.jsch.*; import java.io.InputStream; ...

  7. spring注解@Autowired和@Resource比较

    用途:都是做bean的注入时使用 历史:@Autowired        属于Spring的注解    org.springframework.beans.factory.annotation.Au ...

  8. [tyvj-1071]LCIS 动态规划

    LCIS模板 #include <cstdio> #include <cstring> #include <iostream> using namespace st ...

  9. yii2-dingtalk 钉钉群机器人

    说明 群机器人是钉钉群的高级扩展功能.群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步.目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的 ...

  10. C# 实现自定义的USB设备与上位机进行通信(上位机部分)

    因为以前没用过USB,对USB也不了解,于是上网查了很多资料,不过网上的资料都是零零散散,不清不楚的,于是我自己总结了一下,下面几个链接是网上这么多零散资料里,我觉得比较有参考意义的. USB设备连接 ...