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。


     

  • 相关阅读:
    Java实现 LeetCode 343 整数拆分(动态规划入门经典)
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 338 比特位计数
    H264(NAL简介与I帧判断)
    分享一段H264视频和AAC音频的RTP封包代码
  • 原文地址:https://www.cnblogs.com/superfeeling/p/2121940.html
Copyright © 2011-2022 走看看