2009-09-29 90 views
1

此代碼有一個問題,我不知道那是什麼。此代碼必須在選中時刪除gridview的行。 我設置了AutoGenerateSelectButton = true,然後編寫這個不起作用的代碼,並且從foreach獲得Exception。在Asp.net的Gridview中選擇刪除行

protected void IDeletebtn_Click(object sender, EventArgs e) 
{ 

    foreach (GridViewRow Items in InboxGrv.SelectedRow) 
    { 
     var delete = from del in MDB.Messages 
        where del.Subject == Items.Cells[0].Text.ToString() 
        select del; 

     foreach (var Item in delete) 
     { 
      MDB.Messages.DeleteOnSubmit(Item); 
     } 

     MDB.SubmitChanges(); 
    } 

} 

例外:

foreach語句可以在類型 'System.Web.UI.WebControls.GridViewRow' 的變量無法操作,因爲 'System.Web.UI.WebControls.GridViewRow' 不包含關於 '的GetEnumerator' C公共定義:\ Documents和Settings \據Tehrani \桌面\ MessageAdminPage \ ADMIN \ Inbox.aspx.cs 87 9 C:... \ MessageAdminPage \

+0

你能發佈這個異常嗎? – Arthur 2009-09-29 12:44:33

+0

發表您的例外 – 2009-09-29 12:49:43

回答

0

由於您在迭代不是集合的對象,因此引發了異常。 InboxGrv.SelectedRow是選定的GridViewRow對象。

因爲,現在你已經有了GridViewRow對象,你可以從行中找到Id(PK)來刪除數據庫中的記錄。

1

在foreach代碼(MDB.Messages.DeleteOnSubmit(Item);)修改您正在迭代的集合。使用一個for循環,而不是倒計數:

int deleteCount = delete.Count(); 
var deleteList = delete.ToList(); 
for(int i = deleteCount - 1; i > 0; i--) 
{ 
    MDB.Messages.DeleteOnSubmit(deleteList[i]); 
} 
+0

這個例外從您的代碼: 索引超出範圍。必須是非負數且小於集合的大小。 參數名稱:索引 – 2009-09-29 13:04:24

+0

對不起,改>>到> – Colin 2009-09-29 13:32:54

+0

我用斷點看到deleteOnsubmite不工作 – 2009-09-29 13:47:00

0

試圖改變自己的LINQ查詢:

string subject = Items.Cells[0].Text.ToString() 
var delete = from del in MDB.Messages 
        where del.Subject == subject 
        select del; 

Linq2X嘗試這個表達式樹轉換成SQL語句。但它現在不怎麼處理Items.Cells集合。如果將字符串保存在局部變量中,那麼Linq會看到一個常量。

編輯:啊!我非常專注於Linq聲明,我發現,GridView不支持多個選定的項目。

protected void IDeletebtn_Click(object sender, EventArgs e) 
{ 

    foreach (GridViewRow Items in InboxGrv.SelectedRow) 
    { 

SelectedRow是一個對象,而不是枚舉。

+0

這個問題再次重複 – 2009-09-29 13:17:37