2011-06-30 96 views
2

我目前正試圖通過複選框從列表視圖中刪除一行(或多行)。我的代碼在下面..我在網站的類似區域上使用了相同的內容,但是這個內容似乎不起作用。勾選複選框,按下刪除按鈕,它只是重新加載頁面而不刪除。複選框== true沒有檢測到

頁面加載

protected void Page_Load(object sender, EventArgs e) 
{ 
    DSTableAdapters.contact_messagesTableAdapter cmta = new DSTableAdapters.contact_messagesTableAdapter(); 
    DSTableAdapters.messagesTableAdapter mta = new DSTableAdapters.messagesTableAdapter(); 
    DSTableAdapters.user_messagesTableAdapter umta = new DSTableAdapters.user_messagesTableAdapter(); 

    DataTable cMessageTable = cmta.GetAll(); 
    DataTable ownerMessagesTable = umta.GetMessages("owner"); 
    DataTable clientMessagesTable = umta.GetMessages("user"); 

    lvContact.DataSource = cMessageTable; 
    lvContact.DataBind(); 

    lvClientMessages.DataSource = clientMessagesTable; 
    lvClientMessages.DataBind(); 

    lvOwnerMessages.DataSource = ownerMessagesTable; 
    lvOwnerMessages.DataBind(); 
} 

標記:

<asp:ListView ID="lvContact" runat="server" DataKeyNames="contact_id"> 
     <LayoutTemplate> 
     <table id="itemPlaceHolderContainer"> 
      <tr> 
      <th>Message ID</th> 
      <th>Email Address</th> 
      <th>Message</th> 
      <th>Date</th> 
      </tr> 
      <tr runat="server" id="itemPlaceHolder"></tr> 
     </table> 
     </LayoutTemplate> 
     <ItemTemplate> 
     <tr> 
      <td> 
      <asp:CheckBox ID="chkContactID" runat="server" AutoPostBack="false" /> 
      </td> 
      <td> 
      <asp:Label ID="lblContactEmail" runat="server" Text='<%#Eval("email") %>' /> 
      </td> 
      <td> 
      <asp:Label ID="lblContactMessage" runat="server" Text='<%#Eval("message") %>' /> 
      </td> 
      <td> 
      <asp:Label ID="lblContactDate" runat="server" Text='<%#Eval("date") %>' /> 
      </td> 
     </tr> 
     </ItemTemplate> 
    </asp:ListView> 
    <asp:Button ID="btnContactDelete" runat="server" 
    Text="Delete Selected Messages" onclick="btnContactDelete_Click" /> 

代碼隱藏:

protected void btnContactDelete_Click(object sender, EventArgs e) 
{ 
    // Loop through each row to find checked boxes 
    for (int i = 0; i < lvContact.Items.Count; i++) 
    { 
     ListViewDataItem items = lvContact.Items[i]; 
     int iContactID = Convert.ToInt16(lvContact.DataKeys[items.DataItemIndex]["contact_id"]); 
     CheckBox chkBox = (CheckBox)items.FindControl("chkContactID"); 
     if (chkBox.Checked == true) 
     { 
      Response.Write(iContactID); 
      // If selected to be deleted 
      DSTableAdapters.contact_messagesTableAdapter cmta = new DSTableAdapters.contact_messagesTableAdapter(); 
      cmta.DeleteMessage(iContactID); 
     } 
    } 
    lvContact.DataBind(); 
} 
+0

你可以發佈你的onload事件中的相關代碼嗎? –

回答

5

你填入你的頁面加載ListView控件,您可能需要在

if (!IsPostBack) 
{ 
    //Fill ListView 
} 

我認爲當網頁發佈回你失去選中的複選框。

+0

Response.Write是否顯示正在被刪除的所有不同ID?另外如果你想使用List,你需要使用System.Collections.Generic來添加;到您網頁的頂部。 – Jethro

+0

分類Jethro - 重用時沒有正確重新綁定。非常感謝:) – Kenco

+0

偉大的東西!很高興我能幫上忙。 – Jethro