仅显示复选框列表中最后选定的项目

本文关键字:项目 最后 显示 复选框 列表 | 更新日期: 2023-09-27 18:00:20

我正在尝试数据绑定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中只显示最后一个已选中的城市。我做错了什么?

仅显示复选框列表中最后选定的项目

我认为这是因为您正在将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;
        }
    }
}