加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何为ASP Repeater中的名称列表创建大写字母行

发布时间:2020-12-16 01:53:01 所属栏目:百科 来源:网络整理
导读:我正在使用asp转发器来显示名称列表,我想将当前字母显示为一种分组标题,就像在索引页面中一样. 数据在绑定之前按字母顺序排序,但我发现在显示名称之前很难插入“A”和“B”. 解决方法 将Panel控件添加到ItemTemplate,并将可见性设置为False.当您绑定转发器时
我正在使用asp转发器来显示名称列表,我想将当前字母显示为一种分组标题,就像在索引页面中一样.

数据在绑定之前按字母顺序排序,但我发现在显示名称之前很难插入“A”和“B”.

解决方法

将Panel控件添加到ItemTemplate,并将可见性设置为False.当您绑定转发器时(假设您正在订阅ItemDataBound事件),请运行检查以查看第一个字母是否已更改.如果有,请将面板的可见性设置为true并打印出该字母.

如果您需要一些示例代码,请告诉我.

编辑:示例代码

为了清楚起见,“AlphaHeaders”就是我们想要显示的“A”,“B”,“C”字母

aspx代码

Repeater看起来像这样:

<table>
    <asp:Repeater id="rptRepeater" runat="server" OnItemDataBound="rptNames_OnItemDataBound">
        <ItemTemplate>
            <asp:Panel id="pnlAlphaHeader" runat="server" visible="False">
               <tr><td><asp:Label id="lblAlphaHeader" runat="server" /></td></tr>
            </asp:Panel>
            <tr><td><asp:Label id="lblName" runat="server" /></td></tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

aspx.cs代码

首先,您需要一个包含当前AlphaHeader的变量:

private string _AlphaHeaderCurrent = String.Empty;

然后你将在转发器的OnItemDataBound事件上做你的工作:

protected void rptNames_OnItemDataBound(object sender,System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
   if ((e.ItemType==ListItemType.Item) || (e.ItemType==ListItemType.AlternatingItem)) {
      string name = e.Item.DataItem("Name").ToString();
      //check if the first letter of the current name is new. If it is new,we print out the header
      if(!name.StartsWith(this._AlphaHeaderCurrent)) {
         this._AlphaHeaderCurrent = name.SubString(1);                               
         ((Panel)e.ItemFindControl("pnlAlphaHeader")).Visible = true;
         ((Label)e.Item.FindControl("lblAlphaHeader")).Text = the._AlphaHeader;
      }
      ((Label)e.Item.FindControl("lblName")).Text = name;          
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读