我正在尝试在创建后立即将行设置为编辑模式。但是,我的GridViewRow有一个不正确的DataItemIndex和一个null 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在GridViewRow_RowDataBound事件中为除了。
我没有使用我知道导致问题的分页或排序。
我做错了什么?
答案 0 :(得分:0)
看起来问题是数据表可以包含已删除的行(例如,DataRow.RowState = Deleted),并且网格视图仅包含“有效”行。因此,DataItemIndexes不匹配,如果您尝试引用已删除的行,也可以获得异常。
解决方案是将网格视图绑定到具有CurrentRowsOnly的RowStateFilter的数据视图(myDataTable.DefaultView),然后通过数据视图执行所有更改(添加,编辑和删除)。