У меня есть DropDownList в шаблонном столбце управления GridView. GridView связывается со списком объектов. Каждый объект имеет свойство интервала типа, который соответствует значению в одном из DropDownLists ListItems. Я мог установить выбранный пункт программно путем добавления события DataBind к выпадающему, но я задаюсь вопросом, существует ли способ установить выбранный пункт при помощи блока кода в aspx разметке.
Будьте осторожны в этом дизайне. Создание раскрывающихся списков сетки таким образом означает, что для каждой опции в раскрывающемся списке вы будете повторять для каждой отдельной строки. Это может очень быстро добавить к размерам страниц, превышающим МБ, если у вас более нескольких строк или нескольких раскрывающихся столбцов, что снизит производительность.
При этом вы можете сделать это в разметке, используя теги сценария привязки контекста:
<asp:DropDown id="dropDown1" SelectedValue='<%# Eval("Key") %>' runat="server"/>
Теги привязки контекста также позволяют вызывать общедоступные / защищенные функции на странице / пользовательском элементе управления как:
<asp:DropDown id="dropDown1" SelectedValue='<%# myFunction((int) Eval("Key")) %>' runat="server"/>
public string myFunction(int key){
return key.ToString();
}
Как В качестве альтернативы созданию одного и того же повторяющегося HTML для каждой строки вы можете сделать эти раскрывающиеся списки автозаполнением или создать скрытый раскрывающийся список, который отображает HTML только один раз, а затем использует JQuery или JavaScript для заполнения всех выпадающих списков на стороне клиента.
Вы можете установить его в разметке с помощью:
<ItemTemplate>
<asp:DropDown .. SelectedValue='<%# Eval("Key") %>' />
</ItemTemplate>
В зависимости от того, как вы его привязываете, используете ли вы элемент управления источником данных? В любом случае, я заметил, что этот подход может попытаться установить значение до того, как элементы будут привязаны, и это может вызвать исключение. Не уверен, если бы такое случилось однажды, подумал, что может быть так, но мне следовало бы изучить это более подробно.
HTH.
вы также можете использовать событие RowDataBound для GridView
или выбрать в разметке, как описано @Brian