如何使用文本+LinkBut​​ton 填充项目符号列表?

发布于 2024-10-14 19:10:45 字数 694 浏览 7 评论 0原文

我有这段代码,用于在页面中填充项目符号列表,其中包含站点中的当前角色以及一些额外信息。

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

现在我想在角色字符串的末尾有一个 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();    
    }

I have this code that I use to populate a BulletedList in my page with the current roles in the site + some extra information.

So far, since all these are text-related, no problem.

Now I would like to have a LinkButton control at the end of the role string which if pressed it will delete the role (and repopulate the list) (like the functionality that the admin tool in visual studio has)

My question is: Is there a way to do that in a bulleted list, or should I use another control (like a 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();    
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

狂之美人 2024-10-21 19:10:45

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

为此,您可以在 datagridview 中添加链接按钮,并在该链接按钮的单击事件中删除该特定行。

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

I think you have to add the linkbutton at the end of each row, using which user can delete the record.

For this you can add the linkbutton in datagridview and on click event of that linkbutton you can delete that specefic row.

You can do the same thing even in Repeater instead of datagridview.

当梦初醒 2024-10-21 19:10:45

进一步研究后:

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

如果您希望整个角色字符串为 HyperLinkLinkBut​​ton,您只需设置 BulletedListDisplayMode

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


东西

   <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();

}

After looking into it some more:

Short answer: No, adding another control inside a BulletedList is not possible. BulletedLists do not support templating.

If you want the whole role string to be a HyperLink or a LinkButton, you can simply set the DisplayMode of the BulletedList.

If you want the LinkButton to appear at the end of the text string, you need to use a more flexible list structure. Repeater is probably the easiest to get the effect you are describing.


Something like

   <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>

with code-behind

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();

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文