Nano Hash - криптовалюты, майнинг, программирование

Заполнить DropDownList из WebDataGrid

У меня есть WebDataGrid, связанный с SqlDataSource для отображения данных. Когда выбрана строка, я хочу заполнить некоторые текстовые поля и раскрывающиеся списки данными из этой строки для целей редактирования. Текстовые поля работают нормально; Я использую следующий код, чтобы выбрать второе поле в сетке (Дата) и заполнить соответствующее текстовое поле (я использую VB):

txtDate.Text = currentRow.Items(2).Value

Однако, когда я пытаюсь заполнить раскрывающиеся списки, используя ту же структуру кода, я получаю следующую ошибку:

'ddlType' has a SelectedValue which is invalid because it does not exist in the list of items.

Я думаю, проблема может заключаться в том, что выпадающие списки заполняются с использованием type_id, а в сетке отображается type_name. Будет ли это причиной проблемы, и есть ли способ обойти это?


Ответы:


1

Есть несколько вещей, которые вы можете попробовать:

  1. Измените SQLDataSource, чтобы он также возвращал type_id, и установите для столбца значение visible="false", чтобы вы могли выбрать это поле вместо имени и использовать его для .SelectedValue.

  2. Если это невозможно, вы можете использовать такой код (это будет работать только в том случае, если текст, отображаемый в раскрывающемся списке, уникален и точно такой же, как то, что отображается в представлении сетки):

    'replace this with the call to currentRow.Items(#).Value
    Dim sometext As String = "type_name"

    DropDownListName.Items.FindByText(sometext).Selected = True

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

    'replace this with the call to currentRow.Items(#).Value

    Dim sometext As String = "type_name"

    For Each ddItem As ListItem In ddArriveAMPM.Items

     `If String.Compare(sometext, ddItem.Text, True) = 1 Then`   
         `ddItem.Selected = True`
      `End If`        
    `Next`
    
16.12.2010
  • Я не уверен, что понимаю второй вариант (я новичок в ASP.NET). Как я могу получить type_name выбранной строки без использования currentRow.Items(#).Value? (Каждый элемент в раскрывающемся списке уникален и совпадает с именем, отображаемым в представлении сетки.) 16.12.2010
  • Спасибо - я использую первое предложение! 16.12.2010

  • 2

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

    DropDownListX.Items.Add("Item");
    

    or

    DropDownListX.Items.Add(new ListItem("String","Value"));
    

    Не забудьте очистить поле DropDown при выборе новой строки, иначе значения старых строк останутся там.

    DropDownListX.Items.Clear();
    

    После этого вы можете использовать SelectedValue

    Привет, Стефан

    16.12.2010
  • Теперь я получаю следующее сообщение об ошибке: Недопустимый аргумент обратной передачи или обратного вызова... В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который изначально их обработал. Если данные допустимы и ожидаемы, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки. И заполнение текстовых полей также перестало работать. 16.12.2010
  • Кстати, для: DropDownListX.Items.Add(new ListItem(String,Value)); -- будут ли параметрами currentRow.Items(1).Value (или любой другой номер поля, который мне нужен)? 16.12.2010
  • Да, может быть, хорошо сделать currentRow.Items(1).Value.ToString(). Вы можете сделать это для обоих элементов, чтобы вы могли использовать SelectedValue позже в коде, если у вас нет идентификатора или чего-то еще для привязки значения 16.12.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..