2009-09-29 2 views
1

이 코드에는 무엇이 있는지 모르는 문제가 있습니다. 이 코드는 선택한 경우 gridview의 행을 삭제해야합니다. AutoGenerateSelectButton = true로 설정 한 다음 작동하지 않고 foreach에서 예외가 발생하는이 코드를 작성하십시오.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(); 
    } 

} 

예외 : 'System.Web.UI.WebControls.GridViewRow'는 포함되어 있지 않기 때문에 유형 'System.Web.UI.WebControls.GridViewRow'의 변수에 작동 할 수 없습니다

foreach 문 'GetEnumerator를'C 공공 정의 : \ 문서 및 설정 \ Tehrani 씨 \ 바탕 화면 \ MessageAdminPage \ ADMIN \ Inbox.aspx.cs 87 9 C : ... \ MessageAdminPage

+0

이 예외를 게시 할 수 있습니까? – Arthur

+0

예외가 게시되었습니다. 코드에서 –

답변

0

컬렉션이 아닌 개체를 반복하기 때문에 예외가 throw됩니다. InboxGrv.SelectedRow는 선택된 GridViewRow 개체입니다.

이제 GridViewRow 개체가 이미 있으므로 데이터베이스에서 레코드를 삭제하기 위해 행에서 ID (PK)를 찾을 수 있습니다.

1

foreach 문의 코드 \ (MDB.Messages.DeleteOnSubmit(Item);) 수정 당신이 반복하는 컬렉션. 카운트 다운 대신 루프를 사용

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

예외가 발생했습니다. 인덱스가 범위를 벗어났습니다. 음수가 아니어야하며 콜렉션의 크기보다 작아야합니다. 매개 변수 이름 : 인덱스 –

+0

죄송합니다, 변경> =>> – Colin

+0

나는 중단 점을 사용하고 deleteOnsubmite가 작동하지 않음을 참조하십시오. –

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는 상수를 보게됩니다.

편집 : Ah! GridView가 여러 개의 선택된 항목을 지원하지 않는다는 것을 알기에 Linq 문에 너무 집중했습니다.

protected void IDeletebtn_Click(object sender, EventArgs e) 
{ 

    foreach (GridViewRow Items in InboxGrv.SelectedRow) 
    { 

SelectedRow는 열거 형이 아니라 개체입니다.

+0

thisexception again again –

관련 문제