странная проблема с GridView: выделено 2 строки и отсутствует RowState из 3 - PullRequest
0 голосов
/ 04 ноября 2010

У меня странная проблема. В RowCreated GridView я добавляю следующий скрипт для выбора строки:

Select Case e.Row.RowType
       Case DataControlRowType.DataRow
           e.Row.Attributes("onclick") = Me.Page.ClientScript.GetPostBackClientHyperlink(Me.MainGrid, "Select$" & e.Row.RowIndex)
End Select

Это работает как шарм (подумал я). Но когда я отлаживаю SelectedIndexChanging и следующие SelectedIndexChanged события, я замечаю, что RowState выбранной строки переключается с обычного {0} / чередует {1} на 3 вместо выбранного {2}. Это происходит между SelectedIndexChanging и SelectedIndexChanged. Почему это происходит?

В следующий раз, когда я программно установлю selectedIndex (например, после создания новой строки), у меня есть две выбранные строки, и нет (не хакерский) способ отменить выбор старой в RowDataBound из-за недопустимого RowState из 3 (должно быть только 0,1,2,4 или 8).

Спасибо.

1 Ответ

1 голос
/ 04 ноября 2010

Я до сих пор не знаю, почему RowState меняется на 3, но у меня есть решение для нескольких выбранных строк. Пока я установил GridView.SelectedIndex в RowDataBound:

  If LblPrimaryKey.Text.Equals(Me.CurrentID) Then
     Me.MainGrid.SelectedIndex = e.Row.RowIndex
  End If

Теперь я сохраняю только новый selectedIndex в переменной и устанавливаю его после этого:

  If LblPrimaryKey.Text.Equals(Me.CurrentID) Then
     selectedIndex = e.Row.RowIndex 'member variable'
     'Me.MainGrid.SelectedIndex = e.Row.RowIndex'
  End If

И после RowDataBound в функции, которая вызывает DataBind:

  Me.MainGrid.DataBind()
  Me.MainGrid.SelectedIndex = Me.selectedIndex

Теперь все старые выборки очищаются, и выбирается только одна строка.

...