只有一个选项被预先检查,而不是几个

本文关键字:几个 选项 有一个 检查 | 更新日期: 2023-09-27 18:15:00

我正在研究一个从几个SQL表中提取数据的项目。当我单击要编辑的行时,将填充整个复选框列表,但问题是我需要预先选中与该行相关的复选框。因此,当我添加一行时,我勾选了几个复选框,但当我编辑刚刚添加的新行时,只有一个复选框被预检。我已经检查了SQL表,所有的选项都在那里。这是我的ASP。NET代码:

    <div>
    <div style="display: inline-block; padding-left: 80px;">
        <div>
            <h3>Available Entities</h3>
        </div>
        <div style="overflow-y: scroll; height: 500px;">
            <asp:CheckBoxList ID="cbAvailableEntities" runat="server"></asp:CheckBoxList>
        </div>
    </div>
    <div style="float: right; display: block; margin-right: 150px;">
        <asp:Button ID="btnSaveProject" runat="server" Text="Save Project" OnClick="btnSaveProject_Click" />
        <asp:Button ID="btnClose" runat="server" Text="Close" OnClick="btnClose_Click" />
    </div>
</div>
下面是我的c#代码:
        private void PopulateProjectEntities()
    {
        using (SqlConnection conn = new SqlConnection(connString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "SELECT * FROM [dbo].Corporation WHERE IsEntity <> 0 ORDER BY CompanyName";
                cmd.Connection = conn;
                conn.Open();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        ListItem _listProjectEntities = new ListItem();
                        _listProjectEntities.Text = sdr["CompanyName"].ToString();
                        _listProjectEntities.Value = sdr["CorpId"].ToString();
                        cbAvailableEntities.Items.Add(_listProjectEntities);
                    }
                }
                conn.Close();
            }
        }
    }

    public void GetSelectedEntities()
    {
        //create the connection and command objects
        SqlConnection connection = new SqlConnection(connString);
        SqlCommand command = new SqlCommand();
        //populate the command object
        command.Connection = connection;
        command.CommandText = "SELECT a.CorpID, a.CompanyName FROM [dbo].[Corporation] a Left join [dbo].[ProjectCovEntity] b on a.CorpID = b.CorpID WHERE b.ProjectID = " + _pID;
        using (connection)
        {
            connection.Open();
            using (SqlDataReader sdr = command.ExecuteReader())
            {
                while (sdr.Read())
                {
                    cbAvailableEntities.Items.FindByValue(sdr["CorpID"].ToString()).Selected = true;
                    ListItem _listPE = new ListItem();
                    _listPE.Text = sdr["CompanyName"].ToString();
                    _listPE.Value = sdr["CorpID"].ToString();
                    cbAvailableEntities.Items.Add(_listPE);
                }
            }
        }
    }

我已经在这个问题上纠结了几个星期了,我为此做了很多研究。我甚至在youtube上查了这个视频。

只有一个选项被预先检查,而不是几个

while (sdr.Read()) 
{
    ListItem currentCheckBox = cbAvailableEntities.Items.FindByValue(sdr["CorpID"].ToString());
    if (currentCheckBox != null) 
    {
        currentCheckBox.Selected = true;
    }
}

在另一个帖子上找到这个答案。