DropDownList.SelectedValue не вступает в силу - PullRequest
0 голосов
/ 05 мая 2019

Это может показаться дублирующим вопросом, но я не думаю, что это так.Я устанавливаю свой 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 в коде нет.Выбор по умолчанию должен меняться, но он молча терпит неудачу.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Из всех глупых вопросов. Это не исправило это, но заставило меня двигаться в правильном направлении. Это была проблема чувствительности к регистру. SQL Server возвращал guiid в верхнем регистре, а элементы управления были в нижнем регистре. Это единственное исправление, которое мне пришлось сделать:

ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString().ToLower();

0 голосов
/ 05 мая 2019

Где вы привязываете AnswerGroupId?

замените его

ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();

на

ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex]["AnswerGroupId"].ToString();
...