Как связать 'SelectedValue' в выпадающем списке в приложении ASP.NET Web Forms C # из кода позади? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь использовать раскрывающийся список в EditItemTemplate FormView.Я заполняю раскрывающийся список из таблицы данных.Раскрывающийся список заполняется, как и ожидалось, но когда я пытаюсь сохранить изменения, раскрывающееся поле становится пустым.Как сохранить выбранное значение при внесении изменений в FormView?

Обычно я просто помещал бы SelectedValue = '<% # Bind ("Surname")%>' в раскрывающуюся разметку, но, по-видимому, я могу 't, поскольку я заполняю его в коде позади.

Вот разметка раскрывающегося списка:

<asp:DropDownList runat="server" ID="SurnameDdl" AppendDataBoundItems="True" ></asp:DropDownList>

Вот код данных, который я использую для заполнения раскрывающегося списка:

private DataTable GetAdUsers()
{
    DataTable dt = new DataTable();

    dt.Columns.AddRange(new DataColumn[6]
    {
            new DataColumn("givenName", typeof (string)),
            new DataColumn("sn", typeof (string)),
            new DataColumn("mail", typeof (string)),
            new DataColumn("department", typeof (string)),
            new DataColumn("manager", typeof (string)),
            new DataColumn("DisplayField", System.Type.GetType("System.String"), "sn + ' ,' + givenName + ' ' + mail")
    });

    using (var context = new PrincipalContext(ContextType.Domain, null))
    {
        using (var group = (GroupPrincipal.FindByIdentity(context, "TWIA Underwriting"))) //Options include Users, Everybody, Agent Services, UnderwritingAdmin
        {
            var users = group.GetMembers(true);
            foreach (UserPrincipal user in users)
            {
                DirectoryEntry de = user.GetUnderlyingObject() as DirectoryEntry;
                dt.Rows.Add
                (
                    Convert.ToString(de.Properties["givenName"].Value),
                    Convert.ToString(de.Properties["sn"].Value),
                    Convert.ToString(de.Properties["mail"].Value),
                    Convert.ToString(de.Properties["department"].Value),
                    Regex.Replace((Convert.ToString(de.Properties["manager"].Value)), @"CN=([^,]*),.*$", "$1"),
                    de.Properties["DisplayField"].Value
                );
            }
        }
    }
    return dt;
}

Вот событие OnDataBound FormView:

protected void fvPhaudDets_OnDataBound(object sender, EventArgs e)
{
    if (fvPhaudDets.CurrentMode == FormViewMode.Edit)
    {
        DropDownList ddl = null;
        ddl = (DropDownList)fvPhaudDets.FindControl("SurnameDdl");
        ddl.DataSource = GetAdUsers();
        ddl.DataTextField = "DisplayField";
        ddl.DataValueField = "sn";
        ddl.DataBind();
        ddl.SelectedValue = "Surname";
    }
}

Нужно ли также добавить событие и код в раскрывающийся список?Если да, то что нужно?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете использовать FindControl в FormView, чтобы найти DropDownList.Это также работает в режиме редактирования.Если у вас есть FormView, подобный этому

<asp:FormView ID="FormView1" runat="server">
    <EditItemTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem>Aa</asp:ListItem>
            <asp:ListItem>Bb</asp:ListItem>
            <asp:ListItem>Cc</asp:ListItem>
        </asp:DropDownList>
    </EditItemTemplate>
</asp:FormView>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

Затем привяжите к нему данные и установите режим редактирования для тестирования

if (IsPostBack == false)
{   
    FormView1.DataSource = new string[1];
    FormView1.ChangeMode(FormViewMode.Edit);
    FormView1.DataBind();
}

Теперь вы можете получить значение при нажатии кнопки

protected void Button1_Click(object sender, EventArgs e)
{
    DropDownList ddl = FormView1.FindControl("DropDownList1") as DropDownList;
    Label1.Text = ddl.SelectedValue;
}
...