如何用文本+ LinkBut​​ton填充BulletedList?

时间:2011-01-31 03:23:28

标签: c# asp.net bulletedlist

我有这个代码,用于在我的页面中填充BulletedList,其中包含网站中的当前角色+一些额外信息。

到目前为止,由于所有这些都是文本相关的,没问题。

现在我希望在角色字符串的末尾有一个LinkBut​​ton控件,如果按下它将删除角色(并重新填充列表)(就像visual studio中的管理工具所具有的功能)

我的问题是:有没有办法在项目符号列表中执行此操作,还是应该使用其他控件(如gridview)?

private void BindRolesToList()
    {
        string[] roles = Roles.GetAllRoles();
        string[] data = new string[Roles.GetAllRoles().Count()];

        for (int i = 0; i<roles.Length; i++ )
        {
            data[i] = "Role name: " + roles[i] + ". Number of members in the role: " + Roles.GetUsersInRole(roles[i]).Count() + ".";
        }

        RoleList.DataSource = data;
        RoleList.DataBind();    
    }

2 个答案:

答案 0 :(得分:2)

我认为您必须在每行的末尾添加链接按钮,使用哪个用户可以删除记录。

为此,您可以在datagridview中添加linkbutton,并在该链接按钮的click事件中添加该specefic行。

即使在Repeater而不是datagridview中,你也可以做同样的事情。

答案 1 :(得分:1)

进一步研究之后:

简短回答:不,在BulletedList内添加另一个控件是不可能的。 BulletedList不支持模板化。

如果您希望整个角色字符串为HyperLinkLinkButton,则只需设置DisplayMode of the BulletedList

如果希望LinkBut​​ton出现在文本字符串的末尾,则需要使用更灵活的列表结构。 Repeater可能是最容易获得你所描述的效果的。


这样的东西
   <asp:Repeater id="Repeater1" runat="server">
      <HeaderTemplate>
         <ul>
      </HeaderTemplate>

      <ItemTemplate>
         <li>Role name: <%# DataBinder.Eval(Container.DataItem, "RoleName") %>. 
             Number of members in the role: <%# DataBinder.Eval(Container.DataItem, "RoleCount") %>. 
             <asp:LinkButton onCommand="LinkButton_Command" 
                 CommandArgument="<%# DataBinder.Eval(Container.DataItem, "RoleName") %>"
                 />
         </li>
      </ItemTemplate>

      <FooterTemplate>
         </ul>
      </FooterTemplate>

   </asp:Repeater>

代码隐藏

private void BindRolesToList()
{
    string[] roles = Roles.GetAllRoles();

    //make a table for the data, with two columns, RoleName and RoleCount
    DataTable data = new DataTable();

    DataColumn column;

    column = New DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "RoleName";
    table.Columns.Add(column);

    column = New DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "RoleCount";
    table.Columns.Add(column);

    // Populate the data
    DataRow row;
    for (int i = 0; i<roles.Length; i++ )
    {
         row = data.NewRow();
         row["RoleName"] = roles[i];
         row["RoleCount"] = Roles.GetUsersInRole(roles[i]).Count();
         data.Rows.Add(row);
    }

    RoleList.DataSource = data;
    RoleList.DataBind();    
}

private void LinkButton_Command(Object sender, CommandEventArgs e) 
{
    string RoleName = e.CommandArgument;

    //whatever code deletes the role, e.g.
    //  Roles.DeleteRole(RoleName);

    BindRolesToList();

}