【问题标题】:Only one option is prechecked instead of several只预先检查一个选项而不是几个
【发布时间】:2015-12-27 06:25:51
【问题描述】:

我正在从事一个从多个 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 视频。非常感谢任何帮助。

【问题讨论】:

  • 我没有看到你在任何地方设置了复选框。 cbAvailableEntities.Items.FindByValue(sdr["CorpID"].ToString()).Selected = true;只选择项目。这应该检查cb吗?如果是这样,它应该是 Checked = true。
  • @Sami - 是的,应该检查,但是,当我输入 cbAvailableEntities.Items.FindByValue(sdr["CorpID"].ToString()).Checked = true;我得到一个错误。不确定我是否应该以不同的方式输入整行以将其设置为选中而不是选中。
  • 那是因为该项目是一个列表项。您需要将其转换为复选框。这里没有编译器,但我稍后会检查并发布一个示例。
  • 我尝试将它从 ListItem 更改为 CheckBox,从 ListItem 更改为 CheckBoxList。仍然没有运气,但我可能做错了。如果你有机会展示给我看,我将不胜感激。
  • 我一拿到我的电脑。一两个小时,我会试试的。

标签: c# sql asp.net ado.net checkboxlist


【解决方案1】:
while (sdr.Read()) 
{
    ListItem currentCheckBox = cbAvailableEntities.Items.FindByValue(sdr["CorpID"].ToString());
    if (currentCheckBox != null) 
    {
        currentCheckBox.Selected = true;
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2021-10-20
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多