Repeater的应用之嵌套和行操作

原创 2007年03月22日 22:58:00

repeater是一个 轻量级的控件,它具有效率高,使用灵活等特点,可以根据用户的不同需求生成比较复杂的界面。以下是一个简单的例子,通过嵌套实现常见的子报表功能。同时也顺便提了一下对它的基本数据的操作。

请看示例(asp 2.0):

aspx:

 

<asp:Repeater ID="rp1" runat="server">
    
        
<HeaderTemplate>
            
<table width="100%" border="1" style="border-collapse:collapse;font-size:12px">
                
<tr>
                    
<th align="center" colspan="3">总门员工表</td>
                
</tr>
                
<tr>
                   
<th >部门编号</th>    
                   
<th  colspan="2">部门名称</th>    
                   
                
</tr>
                
            
        
</HeaderTemplate>
        
<ItemTemplate>
               
<tr bgcolor="#336699" style="color:White">
                    
<td><%#Eval("id")%></td>
                    
<td colspan="2"><%#Eval("deptname")%></td>
                    
               
</tr>
              
<tr>
                 
<td></td>
                
<td>
                    
<asp:Repeater ID="rp2" runat="server"
                    
                     DataSource
='<%#((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("RelationName")%>'
                     
                      OnItemCommand="rp2_ItemCommand"
                     >
                        
                        
<HeaderTemplate>
                             
<table width="100%" cellspacing="0" border="0"  cellpadding="0">
                           
                            
<tr  bgcolor="#eeeef1" style="color:black">
                               
<td align="center">删除</td>
                               
<td>员工编号</td>    
                               
<td>员工名称</td>   
                            
</tr>
                            
                        
</HeaderTemplate>
                        
<ItemTemplate>
                             
<tr>
                                
<td align="center">
                                    
<asp:LinkButton ID="nkbDelete" OnClientClick="javascript:return confirm('真的要删除吗?');" runat="server" Text="删除" CommandName="delete" CommandArgument='<%#Eval("[id]")%>'></asp:LinkButton>
                                    
<asp:CheckBox ID="chkSel" runat="server" OnCheckedChanged="CheckBoxChanged" KeyID='<%#Eval("[id]")%>' AutoPostBack="true"    />
                                    
<asp:Button ID="btnDelete" runat="server" Text="删除"   CommandName="delete" CommandArgument='<%#Eval("[id]")%>' /><label id="divDelete"   style="border:solid 1px black;width:60px;" onclick="javascript:this.previousSibling.click();">删除</label>
                                
</td>
                                
<td><%#DataBinder.Eval(Container.DataItem,"[id]")%>
                                
<td><%#Eval("[empname]")%></td>
                             
</tr>
                        
</ItemTemplate>
                        
<FooterTemplate>
                            
</table>
                        
</FooterTemplate>
                    
</asp:Repeater>
                    
                
</td>
              
</tr>
               
        
</ItemTemplate>
        
<FooterTemplate>
              
</table>
        
</FooterTemplate>
    
</asp:Repeater>

 

后台程序:

 

 protected void Page_Load(object sender, EventArgs e)
    {
         
         
        
if (!this.IsPostBack)
        {
            
this._BindRepeater();
        }
         
    }


    DataSet _GetDataSet()
    {

        
if (ViewState["ds"!= null)
        {
            
return (DataSet)ViewState["ds"];
        }
        
        DataSet ds 
= new DataSet();
        DataTable dt 
= new DataTable();
        dt.Columns.Add(
"id"typeof(int));
        dt.Columns.Add(
"DeptName");
        ds.Tables.Add(dt);
        dt.Rows.Add(
1"市场部");
        dt.Rows.Add(
2"人力资源部");
        dt.Rows.Add(
3"金融事业部");
        dt.Rows.Add(
4"通信事业部");



        dt 
= new DataTable();
        dt.Columns.Add(
"id"typeof(int));
        dt.Columns.Add(
"deptid"typeof(int));
        dt.Columns.Add(
"empname");
        
for (int i = 0; i < 20; i++)
        {
            dt.Rows.Add(i, i 
% 4 + 1"员工" + i.ToString());
        }

        ds.Tables.Add(dt);
        
///添加主父子关系
        ds.Relations.Add("RelationName", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["deptId"]);
        ViewState[
"ds"= ds;
        
return ds;

    }
    
void _SaveData(DataSet ds)
    {
        ViewState[
"ds"= ds;
    }

    
void _DeleteData(string sID)
    {
        DataSet ds 
= this._GetDataSet();
        DataTable dt 
= ds.Tables[1];
      
        DataRow[] row 
= dt.Select("id=" + sID);
        
if (row.Length >= 1)
        {
            row[
0].Delete();
        }

        
this._SaveData(ds);
    }
    
void _BindRepeater()
    {

        DataSet ds 
= this._GetDataSet();
      
        
this.rp1.DataSource = ds.Tables[0].DefaultView;
        
this.rp1.DataBind();
 
 
    }

    
protected void CheckBoxChanged(object sender,EventArgs e)
    {
        CheckBox cb 
= (CheckBox)sender;
        
string sID = cb.Attributes["KeyID"];
        
this._DeleteData(sID);
        
this._BindRepeater();

    }
    
    
protected void rp2_ItemCommand(object sender,RepeaterCommandEventArgs e)
    {
       
        
if (e.CommandName == "delete")
        {
            
string sID = e.CommandArgument.ToString();
            
this._DeleteData(sID);
            
this._BindRepeater();
            
        }
    }

 

说明:对于repleater的操作。我用了四个基本元素来实现。linkbutton 和button是一样通过指定commandname触发ItemCommand事件,并绑定了CommandArgument以便在后台事件中获取。

而CheckBox并没有commandname和CommandArgument属性,于是我给它指定了一个自定义的属性KeyID,并绑定数据的id字段。然后在checkbox的事件中获取它的属性进行相关数据操作。

label的操作,这就借用了button的事件来实现。这里label可换成任何可显示在网页中的html元素。

两个Repeater嵌套

  • 2013年06月28日 17:14
  • 2KB
  • 下载

Repeater 嵌套,子级Repeater获取 父级Repeater 中的值

1、Container英文就是容器的意思,并且在我们程序中也确实就是!那么这个Container在我们的显示数据用的(GridView,Repeater,DataList等等)这些里面又是一个什么现象...
  • yelin042
  • yelin042
  • 2017年01月13日 09:54
  • 1334

Repeater嵌套内层Repeater绑定ItemCommand事件

Aspx:                                 删除             >                                 ...
  • huangwei999111
  • huangwei999111
  • 2015年11月13日 09:21
  • 960

在Repeater中嵌套使用Repeater

 在一般的网站中浏览类别的用户控件通常都位于大多数 ASP.NET 页的左边,它使用户能够按类别快速的查找产品。最近遇到一个客户,因为在他网站上展示的产品并不多,所以要求在原有类别浏览的基础上将产品也...
  • wwlearn
  • wwlearn
  • 2007年12月25日 19:35
  • 332

repeater 实现镶嵌和分页

repeater控件是Web服务器控件中的一个容器控件,它使您可以从页的任何可用数据中创建出自定义列表。Repeater不具备内置的呈现功能,这表示用户必须通过创建模板为Repeater控件提供布局。...
  • yjjm1990
  • yjjm1990
  • 2012年07月15日 20:33
  • 629

asp.net中Repeater中嵌套Repeater来显示跟外层Repeater数据相关的其他信息

在实际开发中,比如在统一权限管理系统中,我们预先定义了一些列角色,我们点击每一个角色,进入一个应用系统列表,我们要知道每个应用系统中,该角色已经拥有多少菜单访问权限,我们就可以通过Repeater中嵌...
  • taomanman
  • taomanman
  • 2015年07月03日 16:38
  • 1826

在Repeater中嵌套使用Repeater

前台页面部分:                                                              '>                ...
  • huangwei999111
  • huangwei999111
  • 2015年11月13日 10:56
  • 111

Repeater使用方法---基础数据绑定+多级嵌套

一、基础数据绑定  Repeater控件在编译后不会生成任何多余的代码,而GridView等编译后会生成table标签,这样对于页面的负担和UI样式影响方面,使用Repeater就会显得很有优势了。下...
  • lllliulin
  • lllliulin
  • 2016年01月18日 19:37
  • 321

repeater动态添加行

Repeater动态添加行             server" onitemcommand="rp_List_ItemCommand">        ...
  • weibingbing_net
  • weibingbing_net
  • 2015年03月09日 16:54
  • 900

动态合并Repeater控件数据列

我们在网站上,创建一个网页,拉Repeater控件至网页: 去.aspx.cs为Repeater控件绑定数据,数据库表格,存储过程,以及连接数据库获取数据,在此不提供。 浏览效...
  • donghui6116773
  • donghui6116773
  • 2015年02月11日 15:20
  • 526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Repeater的应用之嵌套和行操作
举报原因:
原因补充:

(最多只允许输入30个字)