2013-12-18 143 views
2

从列表视图控件中,选中复选框并从列表视图外部单击按钮时,我需要能够删除已检查的项目。这里的列表视图:C#从列表视图中从列表视图中删除项目

编辑

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) return; 

    var notes = (from n in db.Notes 
       select n).OrderBy(n => n.FiscalYear).ThenBy(n => n.Period); 

    notesListView.DataSource = notes; 
    notesListView.DataBind(); 
} 

<asp:ListView ID="notesListView" ItemPlaceholderID="itemPlaceholder" runat="server"> 
    <LayoutTemplate> 
     <div> 
      <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
     </div> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <asp:CheckBox ID="checkNote" runat="server" /> 
     <div><%# Eval("Period") %></div> 
     <div><%# Eval("FiscalYear") %></div> 
     <div><%# Eval("Account") %></div> 
     <div class="wrap"><%# Eval("Description") %></div> 
    </ItemTemplate> 
    <EmptyDataTemplate> 
     <div>No notes have been submitted.</div> 
    </EmptyDataTemplate> 
</asp:ListView> 
<br /> 
<asp:Button ID="deleteNotes" CssClass="deleteButton" Text="Delete Notes" runat="server" OnClick="deleteNotes_Click" /> 

这里是后面的代码:

protected void deleteNotes_Click(object sender, EventArgs e) 
{ 
    foreach (ListViewItem item in notesListView.Items) 
    { 
     // I know this is wrong, just not sure what to do 
     if (notesListView.SelectedIndex >= 0) 
     { 
      CheckBox ck = (CheckBox)item.FindControl("checkNote"); 
      if (ck.Checked) 
      { 
        var index = item.DataItemIndex; // the item row selected by the checkbox 
        // db is the datacontext 
        db.Notes.DeleteOnSubmit(index); 
        db.SubmitChanges(); 
      } 
     } 
     else 
     { 
      errorMessage.Text = "* Error: Nothing was deleted."; 
     } 
    } 
} 
+0

ListView是否被重新填充到Page_Load中?这将在该点击处理程序运行之前重置复选框的任何状态。 – David

+0

我刚刚添加了Page_Load代码,但我试图通过检查是否(Page.IsPostBAck)返回来阻止被重新填充; – Mark

+0

我认为你需要从数据库中删除注释吧? –

回答

2

你需要删除它之前找对象。要做到这一点,我想补充一个hiddenfield存储NoteID是这样的:

<asp:HiddenField ID="hdnId" Value='<%#Eval("Id")%>' runat="server" /> 
<asp:CheckBox ID="checkNote" runat="server" /> 
... ... ... 

而且在我的代码,我通过ID查找笔记和删除笔记(你可以使用任何其他独特的领域,而不是ID)。我的代码可能如下所示:

 ... ... ... 
     int id = 0; 
     var hdnId = item.FindControl("hdnId") as HiddenField; 
     CheckBox ck = (CheckBox)item.FindControl("checkNote"); 

     //I would check null for ck 
     if (ck != null && ck.Checked && hdnId != null && int.TryParse(hdnId.Value, out id) 
     {      
       // db is the datacontext 
       Note note = db.Notes.Single(c => c.Id== id); 
       db.Notes.DeleteOnSubmit(note); 
       db.SubmitChanges(); 
     } 
+0

完美工作。谢谢! – Mark