У меня есть DataGrid, который выглядит следующим образом (немного упрощенным здесь):DataBound DropDownList в DataGrid - порядок связывания
<asp:DataGrid ID="grdQuotas" runat="server" AutoGenerateColumns="False">
<HeaderStyle CssClass="quotas-header" />
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
Max order level</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddlMaxOrderLevel" runat="server" DataSourceID="xdsOrderLevel"
DataTextField="Text" DataValueField="Value" SelectedValue='<%# Bind("MaxOrderLevel") %>'>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:XmlDataSource ID="xdsOrderLevel" runat="server" DataFile="~/App_Data/OrderLevels.xml">
</asp:XmlDataSource>
В моем обработчике события Page_Load
Я создаю DataTable
, содержащие значения по умолчанию и DataBind
ИНГ его DataGrid
.
Проблема заключается в том, что это происходит до тогоDropDownList
ddlMaxOrderLevel была привязана к своему DataSource
, так что я получаю сообщение об ошибке выполнения говорил мне, что SelectedValue
не может быть установлен.
Если ddlMaxOrderLevel не в DataGrid
я мог бы просто позвонить DataBind()
на него. Однако я не могу этого сделать в этом сценарии - так как он находится в ItemTemplate
.
Может ли кто-нибудь предложить обходной или альтернативный подход?
К сожалению, это не сработает по той же причине, что и в моем первоначальном вопросе: DropDownList находится внутри ItemTemplate, поэтому не существует как экземпляр элемента управления, с которым вы можете ссылаться –
Но вы можете использовать DataGridItem.FindControl для поиска DDL по ID и DataGridItem.DataItem для получения «MaxOrderLevel». Затем вы можете установить выбранное значение списка с тем же свойством, которое вы получили в разметке. –
Plz скажите мне, помогло ли это вам или если вы нашли лучший ответ – netadictos