Как использовать LinkButton внутри gridview, чтобы удалить выбранное имя пользователя в файле code-behind? - PullRequest
4 голосов
/ 25 марта 2011

У меня есть таблица "UserDetail" в моем "JobPost.mdf".У меня есть «Gridview1», показывающий столбец из таблицы «UserDetail», который имеет первичный ключ «UserName».Это «Имя пользователя» изначально сохраняется с использованием функции класса Членство.Теперь я добавляю кнопку «Удалить» в GridView1.Это «Удалить» не является кнопкой автоматического создания, я перетащил внутри элемента столбца шаблон из панели инструментов.Столбцы GridView1 теперь становятся «Delete_LinkButton» + «UserName» (в таблице UserDetail) + «City» (в таблице UserDetail) + «IsAdmin» (в таблице UserDetail)

Что мне нужно, так этощелкнув этот «delete_linkButton», он ТОЛЬКО удалит весь объект пользователя в той же строке (ссылка с соответствующим «UserName») из таблицы «UserDetail», а также удалит всю информацию из AspNetDB.mdf (пользователь, членство,UserInRole и т. Д.).

Я хотел бы запустить подтверждение пользователя, но не обязательно.По крайней мере, я пытаюсь сделать его работоспособным правильно.

for example:

Command     UserName    City           IsAdmin
delete           ken       Los Angles          TRUE
delete           jim        Toronto        FALSE

Когда я нажимаю «удалить» в первой строке, мне нужна вся запись о «ken» внутри таблицы «UserDetail», чтобыудалить.Между тем, все записи о "ken" в AspNetDB.mdf исчезнут, включая таблицу UserinRole.

Я новичок в asp.net, поэтому не знаю, как передать командный аргумент "Delete_LinkButton "в файл code-behind LinkButton1_Click (отправитель объекта, EventArgs e), поскольку мне нужен один дополнительный параметр" UserName ".

Мой неполный код указан ниже:

<asp:TemplateField>
                 <ItemTemplate>
                     <asp:LinkButton ID="Delete_LinkButton" runat="server" onclick="LinkButton1_Click1" CommandArgument='<%# Eval("UserName","{0}") %>'>LinkButton</asp:LinkButton>
                 </ItemTemplate>
             </asp:TemplateField>


protected void Delete_LinkButton_Click(object sender, EventArgs e)
     {
      ((LinkButton) GridView1.FindControl("Delete_LinkButton")).Attributes.Add("onclick", "'return confirm('Are you sure you want to delete {0} '" + UserName);
      Membership.DeleteUser(UserName);
      JobPostDataContext db = new JobPostDataContext();
      var query = from u in db.UserDetails
                   where u.UserName == UserName
                   select u;
         for (var Item in query)
         {
              db.UserDetails.DeleteOnSubmit(Item);
         }
      db.SubmitChanges();


     }

Пожалуйстапомогите!

1 Ответ

1 голос
/ 26 августа 2011

Для подтверждения вы должны добавить скрипт в свойство OnClientClick LinkButton:

<asp:LinkButton 
    ID="Delete_LinkButton" 
    runat="server" 
    onclick="LinkButton1_Click1" 
    CommandArgument='<%# Eval("UserName","{0}") %>'
    OnClientClick='if (!confirm("Are you sure you want to delete <%# Eval("UserName","{0}") %>?")) return false;'
>
    LinkButton
</asp:LinkButton>

И ваш обработчик событий для этой кнопки должен быть:

protected void Delete_LinkButton_Click(object sender, EventArgs e)
{
    string userName = ((LinkButton)sender).CommandArgument.ToString();

    Membership.DeleteUser(UserName);
    JobPostDataContext db = new JobPostDataContext();

     foreach (var item in db.UserDetails.Where(u => u.UserName == userName))
          db.UserDetails.DeleteOnSubmit(Item);

    db.SubmitChanges();
}

Свойство OnClientClick добавляет написанный вами JavaScript-код к началу свойства onclick визуализированного тега <a/>. Таким образом, если пользователь не подтвердит удаление, он вернет false и ничего не сделает. Иначе, он сделает постбэк для удаления.

В обработчике события sender всегда является элементом управления, который инициировал событие. В этом случае LinkButton. Таким образом, вы можете привести его к LinkButton и получить его свойство CommandArgument, где tye UserName.

...