I publish a more detailed code, since it is not entirely clear:
The form:
<asp:GridView runat="server" id="RolesGrid" allowpaging="true" autogeneratecolumns="False" border="0" cellpadding="5" cellspacing="0" pagesize="7" width="100%" UseAccessibleHeader="true"> <Columns> <asp:templateField runat="server" headerText="Имя роли" > <itemTemplate> <%# Container.DataItem %> </itemTemplate> </asp:templateField> <asp:templateField runat="server" > <itemStyle horizontalAlign="center"/> <itemTemplate> <asp:linkButton runat="server" id="linkButton2" text="Удалить" commandArgument='<%#Container.DataItem%>' OnCommand='DelRoleClick' OnClientClick="if (confirm('Вы уверены, что хотите удалить эту запись?') == false) return false;" /> </itemTemplate> </asp:templateField> </Columns> </asp:GridView>
Server:
//Удаляем роль public void DelRoleClick(object sender, CommandEventArgs e) { string rolename = (string)e.CommandArgument; if(Roles.RoleExists(rolename)) Roles.DeleteRole(rolename); BindRoles(); } //Обновляем список ролей. При первой загрузке эта функция также вызывается, чтобы инициализировать список public void BindRoles() { string[] arr = Roles.GetAllRoles(); RolesGrid.DataSource = arr; RolesGrid.DataBind(); }
Here's another option with Repeater:
<asp:Repeater ID="rptAlphabet" runat="server" OnItemCommand="rptAlphabet_ItemCommand"> <ItemTemplate> <asp:LinkButton CommandArgument='<%# Container.DataItem %>' runat="server"><%# Container.DataItem %></asp:LinkButton> </ItemTemplate> </asp:Repeater>
We fill the list when loading:
string[] alphabet = "a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;все".Split(';'); rptAlphabet.DataSource = alphabet; rptAlphabet.DataBind();
We process pressing:
protected void rptAlphabet_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandArgument.ToString().Length == 1){ gvwUsers.Attributes.Add("SearchText", e.CommandArgument.ToString() + "%"); BindUsers(false); } }