为什么我的GridViewRow.DataItemIndex不正确而DataItem为null?

时间:2010-03-03 19:55:52

标签: asp.net data-binding binding

我正在尝试在创建后立即将行设置为编辑模式。但是,我的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事件中为除了

我没有使用我知道导致问题的分页或排序。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来问题是数据表可以包含已删除的行(例如,DataRow.RowState = Deleted),并且网格视图仅包含“有效”行。因此,DataItemIndexes不匹配,如果您尝试引用已删除的行,也可以获得异常。

解决方案是将网格视图绑定到具有CurrentRowsOnly的RowStateFilter的数据视图(myDataTable.DefaultView),然后通过数据视图执行所有更改(添加,编辑和删除)。