我有这个代码,用于在我的页面中填充BulletedList,其中包含网站中的当前角色+一些额外信息。
到目前为止,由于所有这些都是文本相关的,没问题。
现在我希望在角色字符串的末尾有一个LinkButton控件,如果按下它将删除角色(并重新填充列表)(就像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();
}
答案 0 :(得分:2)
我认为您必须在每行的末尾添加链接按钮,使用哪个用户可以删除记录。
为此,您可以在datagridview中添加linkbutton,并在该链接按钮的click事件中添加该specefic行。
即使在Repeater而不是datagridview中,你也可以做同样的事情。
答案 1 :(得分:1)
进一步研究之后:
简短回答:不,在BulletedList
内添加另一个控件是不可能的。 BulletedList
不支持模板化。
如果您希望整个角色字符串为HyperLink
或LinkButton
,则只需设置DisplayMode
of the BulletedList
。
如果希望LinkButton出现在文本字符串的末尾,则需要使用更灵活的列表结构。 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();
}