2013-12-18 146 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