zoukankan      html  css  js  c++  java
  • 在FootTemplate与ItemTemplate中间扩展Repeater模板

    Repeater是一个轻量级模板,灵活性比较强,相对于GridView和DataList等排版实现相对灵活,所以个人还是比较喜欢用的。但Repeater没有分页模板,并且如果用作后台的话,如果添加批量操作的功能,则也会受到限制,更何况我个人比较较真,一定要在ItemTemplate下边加批量操作模板和分页模板,最后再是FootTemplate模板。从网上搜了一大堆资料,虽然有扩展Repeater模板的,但对于更改Repeater的模板顺序,确是一篇也没有搜到,无奈之下,自己花了几天的时间,狠狠钻研了一下Repeater的模板代码,最后终于完成,并且还扩展出了一个EmptyTemplate模板,在空数据的时候自动显示EmptyTemplate的内容。

    以下是代码示例:

    aspx页面代码:

        <asp:RepeaterPager ID="tNewsList" runat="server" onitemcommand="tNewsList_ItemCommand">
            <HeaderTemplate>
                <table border="0" cellpadding="0" cellspacing="1" class="mainTable">
              <tr>
                <th width="5%">选择</th>
                <th width="12%">所属分类</th>
                <th width="58%">标题</th>
                <th width="15%">属性</th>
                <th width="10%">操作</th>
              </tr>
            </HeaderTemplate>
            <ItemTemplate>
              <tr class="tdbg" onmouseover="ChangeColor(this,true)" onmouseout="ChangeColor(this,false)">
                <td align="center"><asp:CheckBoxValue runat="server" ID="NewsIDChk" Value='<%#Eval("NewsID") %>'/></td>
                <td align="center"><%#Eval("ClassName") %></td>
                <td align="left"><%#Eval("Title") %></td>
                <td align="center">
                        <asp:LinkButton ID="IsHome" runat="server" CommandName="IsHome" CommandArgument='<%#Eval("NewsID") %>' ForeColor='<%#Eval("IsHome").ToString() == "True"?System.Drawing.Color.FromName("#ff0000"):System.Drawing.Color.FromName("#000000") %>'>首页</asp:LinkButton>
                        <asp:LinkButton ID="IsTop" runat="server" CommandName="IsTop" CommandArgument='<%#Eval("NewsID") %>' ForeColor='<%#Eval("IsTop").ToString() == "True"?System.Drawing.Color.FromName("#ff0000"):System.Drawing.Color.FromName("#000000") %>'>置顶</asp:LinkButton></td>
                <td align="center">
                        <asp:ImageButton ID="EditNewsBtn" runat="server" ImageUrl="images/icon_edit.gif" CommandName="EditNews" CommandArgument='<%#Eval("NewsID") %>' />
                        <asp:ImageButton ID="DelNewsBtn" runat="server" ImageUrl="images/no.gif" CommandName="DelNews" CommandArgument='<%#Eval("NewsID") %>' OnClientClick="return confirm('确认要删除吗?')" /></td>
              </tr>
            </ItemTemplate>
            <OperateDataTemplate>
                <tr>
                    <td class="foottr" align="center"><input id="Checkbox1" type="checkbox" name="chkall" onclick="CheckAll(form1)" /></td>
                    <td colspan="5" class="foottr"><asp:DropDownList ID="BatchOperation" runat="server">
                    <asp:ListItem Text="请选择" Value=""></asp:ListItem>
                    <asp:ListItem Text="批量删除" Value="Del"></asp:ListItem>
                    <asp:ListItem Text="批量设为首页" Value="IsHomeTrue"></asp:ListItem>
                    <asp:ListItem Text="批量取消首页" Value="IsHomeFalse"></asp:ListItem>
                    <asp:ListItem Text="批量设为置顶" Value="IsTopTrue"></asp:ListItem>
                    <asp:ListItem Text="批量取消置顶" Value="IsTopFalse"></asp:ListItem>
                    </asp:DropDownList>
                    <asp:DropDownList ID="AgentsID" runat="server" style="display:none;">
                    </asp:DropDownList>
                    <asp:Button ID="Button2" runat="server" Text="执行操作" CssClass="btn" OnClick="Button2_Click" />
                    </td>
                 </tr>
            </OperateDataTemplate>
            <EmptyTemplate>
                <tr>
                    <td colspan="5" class="tdbg" align="center">暂无内容</td>
                </tr>
            </EmptyTemplate>
            <FooterTemplate></table></FooterTemplate>
        </asp:RepeaterPager>
    

    上面的代码中是并没有PageTemplate,是因为我把这部分的实现放到了控件的一个单独类中,最初是直接实现在扩展的Repeater控件中的,但后来发现虽然运行没有问题,但在vs中点击aspx页面的查看按钮时,总是不能正常显示Repeater的界面,无奈之下,只好把分页部分的代码单独放出来了。

    以下是.aspx.cs页面的调用代码:

          MyTemplate pagetemp = new MyTemplate();//新建一个MyTemplate模板对象,这个在控件中已经实现,扩展自ITemplate接口
          pagetemp.Colspan = 5;  //这个参数的作用在于如果Repeater为Table布局,设置分页所在行的HTML表格跨列数
          pagetemp.PageSize = 12;  //这个不用说,每页的显示数据
          pagetemp.PageLayout = Layout.table;  //设置Repeater的代码布局,如果是table,则会自动在分页开始末尾处加上tr和td标记
          pagetemp.UrlFormat = "NewsManage.aspx?KeyWords=" + keywords + "&";  //设置URL格式,主要在分页时传参
            pagetemp.RecordCount = (int)SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, CommandType.Text, SqlCount + sqlwhere.ToString());
            DataTable dt = SqlHelper.ExecuteDataset(SqlHelper.ConnectionString, CommandType.Text, Sql, pagetemp.PageSize * (pagetemp.CurrentPageIndex - 1), pagetemp.PageSize, "temptb1").Tables[0];
            tNewsList.PageDataTemplate = pagetemp;   //将pagetemp模板直接赋给PageDataTemplate模板
            tNewsList.DataSource = dt;
            tNewsList.DataBind();
            dt.Dispose();
    

    关于批量操作的说明:
    扩展之后Repeater不能通过Repeater.Items[i]取得某一模板项了,不过还是有变通的方法,我在扩展的Repeater中提供了一个ItemsList属性,可以遍历它得到的每一个对象即为:RepeaterItem。


     

  • 相关阅读:
    第十章 CALL和RET指令
    第九章 转移指令的原理
    第八章 数据处理的两个基本问题
    实验九 根据材料编程
    第七章 更灵活的定位内存地址的方法
    第六章 包含多个段的程序
    实验五 编写、调试具有多个段的程序
    实验四 [bx]和loop的使用
    第五章 【BX】和loop指令
    第四章 第一个程序
  • 原文地址:https://www.cnblogs.com/superfeeling/p/2121940.html
Copyright © 2011-2022 走看看