2010-03-03 38 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),然后通过数据视图执行所有更改(添加,编辑和删除)。

相关问题