2010-12-16 5 views
0

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

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

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

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

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

ответ

0

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

  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` 
    
0

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

DropDownListX.Items.Add("Item"); 

или

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

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

DropDownListX.Items.Clear(); 

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

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

+0

Теперь я получаю следующее сообщение об ошибке: «Invalid постбэка или обратный аргумент ... В целях безопасности эта функция проверяет что аргументы для событий обратной передачи или обратного вызова происходят из управляющего сервера, который изначально их представлял. Если данные действительны и ожидаются, u se ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки ». И заселение текстовых полей также перестало работать. – dj18 2010-12-16 16:47:08

+0

Кстати, для: DropDownListX.Items.Add (новый ListItem (« String »,« Value »)); - будут ли параметры currentRow.Items (1) .Value (или любое другое число полей, которое мне нужно)? – dj18 2010-12-16 16:53:22

Смежные вопросы