Это может показаться дублирующим вопросом, но я не думаю, что это так.Я устанавливаю свой asp:DropDownList
на странице ASPX и задаю его SelectedValue
во время события RowDataBound
после проверки того, редактируется ли текущая строка вида сетки.При установке свойства элемента управления SelectedValue
элемента управления и при его немедленной проверке сразу после его установки ошибки не изменяются.
Вот соответствующий код
<asp:SqlDataSource
ID="DataSourceAnswerGroups"
runat="server"
ConnectionString="<%$ ConnectionStrings %>"
DataSourceMode="DataSet"
SelectCommand="
SELECT
Id
,Description
FROM dbo.table
WHERE Active = 1
ORDER BY Description
;
" />
<asp:GridView
ID="GridView"
runat="server"
OnRowDataBound="GridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Answer Group" SortExpression="AnswerGroup" ItemStyle-Wrap="false" ItemStyle-CssClass="left">
<ItemTemplate>
<%# Eval("AnswerGroup") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
ID="ddlAnswerGroupEdit"
runat="server"
DataSourceID="DataSourceAnswerGroups"
DataValueField="Id"
DataTextField="Description"/>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Код позади
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex == GridView.EditIndex)
{
DropDownList ddlAnswerGroupEdit = (DropDownList)e.Row.FindControl("ddlAnswerGroupEdit");
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();
Response.Write(GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString() + "<br/>"); // this outputs the correct guid
Response.Write(ddlAnswerGroupEdit.SelectedValue + "<br/>"); // this always outputs the same guid, the one that represents the first item on the list.
}
}
Других манипуляций с DdataSource или DropDownList в коде нет.Выбор по умолчанию должен меняться, но он молча терпит неудачу.Любая помощь будет оценена.