Ведение выбора строки в элементе управления ASP.NET GridView - PullRequest
1 голос
/ 01 февраля 2012

Настройка: у меня в настоящее время есть страница с элементом управления GridView внутри панели обновлений, использующая SqlDataSource.У меня есть таймер для обновления GridView каждые X секунд.Обычно для того, что я тестирую, каждый раз, когда GridView обновляет около 4-5 новых строк данных, добавляемых в gridview, в то время как последние 4-5 отбрасываются.Я отображаю только 15 результатов за раз, и в каждом обновлении будут появляться новые результаты.

Проблема: я разрешаю пользователю выбирать строки во время обновления GridView.Я занимаюсь этим, установив свойство SelectedIndex.Однако, когда я выбираю строку, а затем сетка обновляется, выбранная пользователем строка сдвигается примерно на 4-5 строк, и вместо этого выбираются данные в предыдущем выбранном индексе.Поэтому в данный момент выбирается место, по которому они щелкнули, а не то, по которому они щелкнули.

Мне нужен способ, если возможно, определить из SqlDataSource / Gridview, сколько новых строк было добавлено в представление сетки.ИЛИ способ сохранить выбранные данные по данным в строке, а не только по SelectedIndex.

Любая помощь приветствуется, спасибо.

РАЗРЕШЕНО: Хорошо, я продолжил и добавил нового невидимогостолбец в моей сетке, и теперь я отслеживаю уникальный идентификатор, выбранный из БД.Установив массив перед привязкой данных и сравнив его с новым массивом, полученным после привязки данных, я смог использовать простое пересечение для определения количества одинаковых строк.Затем я использовал это, чтобы определить из общего количества новых постбэков.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Просто идея:

Я думаю, вы можете использовать невидимый столбец (точнее, столбец ID), чтобы сохранить значение IDs выбранных строк в объекте Session, а затем послеОбновления сетки, вы можете получить эти значения и снова выбрать строки, если они все еще присутствуют.

0 голосов
/ 01 февраля 2012

Если у вас есть пользовательское событие GridView OnRowUpdating.

public void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    Session["CurrIndex"] = GridView.SelectedIndex;//index before insertion
    Session["RowCount"] = GridView.Rows.Count;//row count before insertion
    //Add new Rows
    GridView.SelectedIndex = (Int32)(Session["CurrIndex"]) + ( GridView.Rows.Count - (Int32)(Session["RowCount"]);//update selected index
    Session["CurrIndex"] = GridView.SelectedIndex;//restore the index into session
}  
...