2011-01-31 27 views
1

首先,讓我說我是一個c#和asp.net業餘愛好者,所以我想事先說對不起,如果我問你其他人顯而易見的事情。 :)如何使用文本+ LinkBut​​ton填充BulletedList?

我有這個代碼,我用我的頁面中的當前角色+一些額外的信息填充BulletedList。

到目前爲止,由於所有這些都是文字相關的,沒有問題。

現在我想有在角色的字符串,如果按下它會刪除的角色結束LinkBut​​ton控件(和重新填充列表)(如在Visual Studio中的管理工具具有的功能)

我的問題(S)是:有沒有辦法做到在項目符號列表或我應該使用其他控件(如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

是什麼與該而來的aspx文件是什麼樣子? – Stobor 2011-01-31 03:29:28

+0

你是什麼意思?我只是在頁面中拖放了一個項目符號列表,並在後面的代碼中寫下了這個方法。然後我將它包含在page_load中。如果這個項目有什麼不同,該項目不是MVC。 – Blm33 2011-01-31 03:38:03

回答

0

尋找到它多一些之後。 BulletedList s不支持模板。

如果您希望整個角色字符串爲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(); 

} 
2

我認爲你必須在每行末尾添加鏈接按鈕,使用哪個用戶可以刪除該記錄。

爲此,您可以在datagridview中添加鏈接按鈕,並在該鏈接按鈕的單擊事件中,您可以刪除該specefic行。

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

簡短的回答:不,加入另一個控制內部BulletedList是不可能