2010-03-03 37 views
0

我試圖在創建後立即將一行設置爲編輯模式。然而,我的GridViewRow有一個不正確DataItemIndex和一個空的DataItem ...爲什麼我的GridViewRow.DataItemIndex不正確並且DataItem爲空?

這裏是我的代碼是做一個總體思路:(僞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.DataItem爲null ,但GridViewRow_RowDataBound事件中的除外。

我沒有使用分頁或排序,或者我知道會導致問題。

我在做什麼錯?

回答

0

看起來問題是數據表可以包含已刪除的行(例如,DataRow.RowState = Deleted),並且網格視圖只包含「有效」行。因此,DataItemIndexes不匹配,如果您嘗試引用已刪除的行,您也可能會遇到異常。

解決方案是使用CurrentRowsOnly的RowStateFilter將網格視圖綁定到數據視圖(myDataTable.DefaultView),然後通過數據視圖執行所有更改(添加,編輯和刪除)。

相關問題