检索复选框值并将其标记为已选中

时间:2019-06-20 02:58:21

标签: asp.net-mvc checkboxlist

我正在尝试从数据库检索选项到复选框,并且如果它具有相同的产品ID,则默认情况下必须对其进行检查

这是数据库的插入代码

for (int i = 0; i < ddlcaroptions.Items.Count; i++)
{
   if (ddlcaroptions.Items[i].Selected == true)
{
Int64 PCarOptionID = Convert.ToInt64(ddlcaroptions.Items[i].Value);
SqlCommand cmd2 = new SqlCommand("insert into tblCarOptionQuant values('" + PID + "','" + PCarOptionID + "')", con);
cmd2.ExecuteNonQuery();
}
}

现在工作正常,我想编辑此复选框并更新数据库 现在我从另一个具有名称和值的表中绑定复选框


SqlCommand cmd = new SqlCommand("select * from tblCarOption", con);

                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                if (dt.Rows.Count != 0)
                {
                    ddlcaroptions.DataSource = dt;
                    ddlcaroptions.DataTextField = "CarOptionNameAR";
                    ddlcaroptions.DataValueField = "CarOptionID";
                    ddlcaroptions.DataBind();
                }

现在我拥有所有选项,但我希望所选值是用户之前已经检查过并保存在tblCarOptionQuant表中的值,

我试图通过此命令获取值

using (SqlCommand getselectedop = new SqlCommand("select PCarOptionID from tblCarOptionQuant where PID = " + PID + "", con))

可以,但是现在我该怎么做才能从此命令结果中设置选定的值!??

2 个答案:

答案 0 :(得分:0)

您可以使用FindByValue获取特定项目并将其设置为选中状态,请参考下面的代码

string value = "SomeValue";
               var item = ddlcompany.Items.FindByValue(value);
               if (item != null)
                   item.Selected = true;

答案 1 :(得分:0)

问题是当您检索数据并将其转换为字符串时,您只会得到第一行,因此我使用StringBuilder来构建1个字符串,其中表中的所有行都是:) !!注意! 在使用此代码之前,请确保将复选框与用户选中或未选中的所有值绑定在一起,然后使用此代码获取之前(由用户选择)的选项

                using (SqlCommand getselectedop = new SqlCommand("RetrieveCarOptions", con))
            {
                getselectedop.CommandType = CommandType.StoredProcedure;
                getselectedop.Parameters.AddWithValue("@PID", Convert.ToInt64(Request.QueryString["PID"]));
                con.Open();
                using (SqlDataReader reader = getselectedop.ExecuteReader())
                {
                    StringBuilder sb = new StringBuilder();
                    if (reader.HasRows)
                    {
                        if (sb.Length > 0) sb.Append("___");
                        while (reader.Read())
                        {
                            for (int i = 0; i < reader.FieldCount; i++)
                                if (reader.GetValue(i) != DBNull.Value)
                                    sb.AppendFormat("{0}-", Convert.ToString(reader.GetValue(i)));
                            SelectCheckBoxList(reader["PCarOptionID"].ToString(), ddlcaroptions);
                        }
                    }
                }
            }

现在拆分并检查它是否具有相同的值以标记为已选中

        private void SelectCheckBoxList(string valueToSelect, CheckBoxList ddlcaroptions)
    {
        string[] aray = valueToSelect.Split(',');
        foreach (string listItem2 in aray)
        {
            ListItem listItem = ddlcaroptions.Items.FindByValue(valueToSelect);
            listItem.Selected = true;                
        }
    }

我希望这个答案很清楚,并能帮助其他人:)