Coder4EU Ответов: 3

Как обновить список после выбора в gridview (ASP.NET)


Привет,

Я снова вернулся и у меня есть еще один вопрос:

У меня есть простая веб-страница GridView ona с несколькими именами в ней:

- Алекс
- Фома
- Кейт
- Джордж

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

Я использую событие SelectedIndexChanged.

У меня есть этот код:
Public Class StudentNames
Inherits System.Web.UI.Page
Public List As New Generic.List(Of String)


Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged

Name = GridView1.SelectedRow.Cells(0).Text

List.Add(Name)


Я нажимаю на имя Алекс в GridView, и Алекс добавляется в список. Но когда я нажимаю на Томаса в GridView, кажется, что имя Алекс исчезло из списка.

У меня есть текстовое поле 1, где я считаю выбранные имена.

Textbox1.text = List.count


Список.кол-во = 1. После добавления имени Алекс я ожидаю, что в списке будет два пункта, а не один.

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

Извините за мой плохой английский.

Заранее спасибо.

Что я уже пробовал:

Поиск на веб-сайте Microsoft и Google

3 Ответов

Рейтинг:
6

Richard Deeming

Цитата:
Public Class StudentNames
Inherits System.Web.UI.Page
    Public List As New Generic.List(Of String)
Каждый запрос на вашу страницу, включая обратный, создаст новый экземпляр класса страницы для обработки запроса.

Все, что хранится в поле внутри этого класса, не будет сохраняться между запросами.

Вам нужно будет сохранить свой список в ViewState чтобы изменения сохранялись между запросами.
Public Property List As Generic.List(Of String)
    Get
        Dim value As String() = DirectCast(ViewState("List"), String())
        If value Is Nothing Then Return New Generic.List(Of String)
        Return New Generic.List(Of String)(value)
    End Get
    Set(ByVal value As Generic.List(Of String))
        If value Is Nothing Then Throw New ArgumentNullException()
        ViewState("List") = value.ToArray()
    End Set
End Property
ASP.NET общие сведения об управлении состоянием | Майкрософт документы[^]


Coder4EU

Спасибо за ответ. В моем событии SelectedIndexChanged мне также нужно обратиться к публичному свойству?

Richard Deeming

В любом месте, где вы в настоящее время ссылаетесь на поле, вы бы использовали вместо него свойство.

Coder4EU

Большое вам спасибо за ответ. Мой код работает хорошо.

Рейтинг:
1

Garth J Lancaster

Я думаю, что вы должны использовать событие GridView для "Selected" / "Clicked" - Im на моем Mac, поэтому я не могу легко сказать вам, что это такое, но если вы находитесь в режиме разработки форм и выбираете GridView, есть способ увидеть события - так что выберите событие и определите для него обработчик .. на самом деле, это Практическое руководство.Событие SelectionChanged (Системы.Окна.Формы) | Microsoft Docs[^] может помочь - например, есть даже событие для добавленных строк ... взгляните на SelectionChanged

Зная это, если вы все еще застряли, вы можете погуглить VB.Net Gridview SelectionChanged example' и это должно вам помочь


Coder4EU

Спасибо за ответ. Я использую событие SelectedIndexChanged для своего кода, но это не будет работать правильно. Похоже, что список перезаписывается, когда я добавляю новое имя (старое имя исчезло).

Garth J Lancaster

"но это не будет работать правильно." не очень полезно - почему бы вам не использовать Улучшить вопрос и добавьте код обработчика событий SelectionIndexChanged, который у вас есть, постарайтесь как можно яснее описать, почему он не работает, и мы посмотрим, что мы можем сделать/предложить .. не беспокойтесь слишком много о "плохом английском" бите, мы вполне терпимы, если только смысл не затуманен, тогда мы всегда можем спросить вас

Coder4EU

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

Garth J Lancaster

извините, не видя кода, все, что я могу сделать, это пожать плечами - я тоже не могу настроить тест отсюда ... может быть, кто-то еще поймет из вашего описания

Coder4EU

Спасибо за ответы. Я ценю ваши усилия

Рейтинг:
1

Richard MacCutchan

Потому что каждый раз, когда это событие срабатывает, вы создаете новый список, который будет содержать только одно имя. Ваш список должен быть объявлен и инициализирован вне обработчика событий, поэтому каждое событие добавит имя к существующему списку.


Coder4EU

Спасибо за ответ. Я объявил свой список вне обработчика событий, но список.Счетчик по-прежнему равен 1 После выбора другого имени в GridView.

Richard MacCutchan

Да, но вы все еще создаете новый временный файл в обработчике событий.

Coder4EU

Спасибо за ответ. Может быть, мой ответ был немного неясным.

Я удалил список из обработчика событий и поместил его вне обработчика событий. Этот результат также в list.count равен 1. Я обновил свой вопрос с помощью моего недавнего кода.

Richard MacCutchan

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

Coder4EU

Спасибо за ответ. Я вставлю точку останова и проанализирую, что происходит не так.