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使用方法---基础数据绑定+多级嵌套

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

repeater 实现镶嵌和分页

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

Repeater的应用之嵌套和行操作

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

Repeater控件的itemDataBound事件与寻找控件

   //protected void lstArticle_ItemDataBound(object sender, DataListItemEventArgs e)        //{     ...
  • baozhenliang
  • baozhenliang
  • 2006-12-07 16:15:00
  • 891

ASP.NET Repeater实现全选反选(原生JS)

ASPX: 全选 原生JS: //====功能:复选框全选、取消=====// function ToggleCheckAll(e,item) { var i...
  • qq285679784
  • qq285679784
  • 2017-08-29 17:40:48
  • 244

js 双击 repeater 表格弹出双击行明细

    function OpendetailPage()     {        var table=document.getElementById("mytable")      if(wind...
  • tao19840705
  • tao19840705
  • 2010-08-23 09:57:00
  • 2897

用repeater嵌套CheckBox+CheckBoxList实现树型选择菜单

页面:                      runat="server" AutoPostBack="True" OnCheckedChanged="CheckBoxRole_CheckedCh...
  • WSYXJER
  • WSYXJER
  • 2007-10-11 21:30:00
  • 2646

给gridview动态生成radiobutton添加OnCheckedChanged事件

在写研究生系统审核功能的时候,有一个页面的gridview动态生成四列radiobutton,在gridview控件外有四个 radiobutton分别控制这四列的全选中。那么当外面的某个全选按钮选中...
  • judyge
  • judyge
  • 2015-11-15 10:02:11
  • 359

Repeater嵌套内层Repeater绑定ItemCommand事件

Aspx:                                 删除             >                                 ...
  • huangwei999111
  • huangwei999111
  • 2015-11-13 09:21:28
  • 1039

repeater嵌套repeater嵌套

  • 2010年10月21日 14:21
  • 9KB
  • 下载
收藏助手
不良信息举报
您举报文章:Repeater的应用之嵌套和行操作
举报原因:
原因补充:

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