Почему мой GridViewRow.DataItemIndex неправильный и DataItem нулевой? - PullRequest
0 голосов
/ 03 марта 2010

Я пытаюсь сразу установить строку в режим редактирования после ее создания. Однако мой 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.

Я не использую подкачку или сортировку, что, как я знаю, вызывает проблемы.

Что я делаю не так?

1 Ответ

0 голосов
/ 04 марта 2010

Похоже, проблема в том, что таблица данных может содержать удаленные строки (например, DataRow.RowState = Deleted), а представление сетки содержит только «допустимые» строки. Таким образом, DataItemIndexes не совпадают, и вы также можете получить исключения, если попытаетесь обратиться к удаленной строке.

Решением было связать представление сетки с представлением данных (myDataTable.DefaultView) с помощью RowStateFilter для CurrentRowsOnly, а затем выполнить все изменения (добавить, изменить и удалить) через представление данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...