Отображение только последнего выбранного элемента из CheckBoxList

Я пытаюсь связать данные CheckBoxList, но выбирается только последний элемент.

ASPX:

<asp:CheckBoxList ID="CityCheckBoxList" runat="server"
    DataSourceID="SqlDS1" DataTextField="City" 
    DataValueField="CityID" AutoPostBack="True">
</asp:CheckBoxList>

<asp:SqlDataSource ID="SqlDS1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommandType="StoredProcedure">
</asp:SqlDataSource>

Код позади:

using (SqlDataReader sdr = cmd.ExecuteReader())
{
    while (sdr.Read())
    {
        EmployeeIdTextBox.Text = sdr["EmployeeID"].ToString();
        EmployeeNameTextBox.Text = sdr["EmployeeName"].ToString();

        CityCheckBoxList.DataBind();
        ListItem currentCheckBox = CityCheckBoxList.Items.FindByValue(sdr["CityID"].ToString());
        if (currentCheckBox != null)
        {
            currentCheckBox.Selected = true;
        }
    }
}

Если сотрудник принадлежит более чем одному городу, в CityCheckBoxList отображается только последний из них. Что я делаю неправильно?

1 ответ

Решение

Я думаю, потому что вы обязательны CityCheckBoxList на каждого сотрудника из базы данных. Привязка данных для флажков должна быть вынесена за пределы цикла. Попробуй это:

using (SqlDataReader sdr = cmd.ExecuteReader())
{
    CityCheckBoxList.DataBind();
    while (sdr.Read())
    {
        EmployeeIdTextBox.Text = sdr["EmployeeID"].ToString();
        EmployeeNameTextBox.Text = sdr["EmployeeName"].ToString();    

        ListItem currentCheckBox = CityCheckBoxList.Items.FindByValue(sdr["CityID"].ToString());
        if (currentCheckBox != null)
        {
            currentCheckBox.Selected = true;
        }
    }
}
Другие вопросы по тегам