2010-03-03 4 views
0

행을 생성 한 후 즉시 편집 모드로 설정하려고합니다. 하지만, 내 GridViewRow 잘못된 DataItemIndex 및 null있는 DataItem ... 여기 왜 내 GridViewRow.DataItemIndex가 올바르지 않고 DataItem이 null입니까?

내 코드가 무엇을하고 있는지에 대한 일반적인 생각이 있습니다 (의사 VB 코드)

Protected Sub gvItems_RowCommand(....) 
    if (e.CommandName = 'New') 
    Begin 
    // create new empty and add it to my data table 
    m_dtItems.Rows.Add(m_dtItems.NewRow()) // m_dtItems is a DataTable 

    // rebind the gridview to the modified data table 
    gvItems.DataSource = m_dtItems 
    gvItems.DataBind() 

    // loop through grid view to find the row we just inserted 
    Dim newRowDataItemIndex As Integer = m_dtItems.Rows.IndexOf(dRow) 

    For each row in gvItems.Rows 
     if (row.DataItemIndex = newRowDataItemIndex) 
     gvItems.EditIndex = row.RowIndex 

    // rebind the grid so the edit index takes effect 
    gvItems.DataSource = m_dtItems 
    gvItems.DataBind() 
    End 
End Sub 

문제는 GridViewRow.DataItemIndex는 점이다 이 아닙니다. RowIndex와 같은 것 같습니다. 또한 GridViewRow_RowDataBound 이벤트 내에서을 제외한 내 GridViewRow.DataItem은 null 입니다.

내가 알기로 페이징이나 정렬을 사용하지 않고 있습니다.

내가 뭘 잘못하고 있니?

답변

0

데이터 테이블에 삭제 된 행 (예 : DataRow.RowState = Deleted)이 포함될 수 있고 그리드보기에 "유효한"행만 포함될 수있는 것처럼 보입니다. 따라서 DataItemIndexes가 일치하지 않으므로 삭제 된 행을 참조하려고하면 예외가 발생할 수 있습니다.

해결 방법은 GridView를 CurrentRowsOnly의 RowStateFilter를 사용하여 데이터보기 (myDataTable.DefaultView)에 바인딩 한 다음 데이터보기를 통해 모든 변경 (추가, 편집 및 삭제)을 수행하는 것이 었습니다.

관련 문제