【问题标题】:retrieve checkbox values and mark as checked检索复选框值并标记为选中
【发布时间】:2019-06-20 02:58:21
【问题描述】:

我正在尝试从数据库检索选项到复选框,如果它具有相同的产品 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))

没关系,但现在我可以做些什么来设置这个命令结果中的选定值!??

【问题讨论】:

    标签: asp.net-mvc checkboxlist


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答,是的,它正在工作,但仍有问题,我怎样才能给出超过 1 个值?或者如果我想选择多个选项,我该怎么办,我尝试了你所说的,但仍然必须在string value = "SomeValue"; 中选择 1 个值,它不是 1 个值!!
    • 请参考这篇文章,也许它会对你有所帮助。 stackoverflow.com/questions/9185770/…
    【解决方案2】:

    问题是当您检索数据并转换为字符串时,您只会得到第一行,所以我使用 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;                
            }
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2013-06-02
      • 2016-10-01
      • 1970-01-01
      • 2013-06-23
      • 2011-04-14
      • 2017-05-07
      相关资源
      最近更新 更多