使用c#从复选框中选择多个

时间:2012-01-27 12:39:07

标签: c#

Hy ..我有一个包含5个选项的复选框。我想将选中的值插入一个以','分隔的表中。这是我的代码:

        string str = string.Empty;

        foreach (ListItem item in this.checkbox1.Items)
       {
            if (item.Selected)
           {
                str = str + ",";
           }
        }

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
        SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values('" + str + "',@cnp,@data,'10')", con);

        cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
        cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());


        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            Response.Redirect("User11.aspx");
        }

        catch (Exception ex)
        {
            Console.WriteLine("Error:" + ex);
        }
        finally
        {
            con.Close();
        }

我的问题是,当我点击插入按钮时,它不会插入用户选中的值。我必须为字符串str赋值。这个值是什么?

4 个答案:

答案 0 :(得分:3)

string str = string.Empty;

foreach (ListItem item in this.checkbox1.Items)
{
    if (item.Selected)
    {
        str = str + ",";
    }
}

问题是str永远不会有值,所以你只是在数据库中写一系列逗号 - 每个项目都有一个逗号。

您需要在字符串中添加其他内容以确定选择了哪些选项 - 可能是item.Value。所以你的代码将成为:

if (item.Selected)
{
    str += item.Value + ",";
}

但是,使用这样的字符串连接效率不高,因为它需要每次都重新创建字符串对象(字符串是不可变的)。因此,使用StringBuilder可以提高代码效率。

字符串以逗号结尾也可以吗?如果没有,很容易删除:

str = str.TrimEnd(new char[] { ',' })

答案 1 :(得分:0)

变化:

StringBuilder values = new StringBuilder();

if (item.Selected)  
{    
    if (sb.Length) > 0
        values.Append(","); // To ensure that the last char is not a comma after the loop
    values.Append(item.value);

}  


SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@str,@cnp,@data,'10')", con);

添加:

cmd.Parameters.AddWithValue("@str", values.ToString()); 
  1. 因此我们通过将值作为参数传递来删除可能获得的sql注入。另外,要获取ListItem的选定值,请使用Value属性。

  2. 现在你要做的就是将值添加到stringbuilder中(你不需要使用stringbuilder,但如果列表框中有很多值,它会更有效。)

  3. 从StringBuilder

  4. 设置参数值

答案 2 :(得分:0)

  • 首先:避免循环中string的连接。 C#中的字符串是不可变的,因此您在每次迭代时都会分配一个新内存。使用StringBuilder()及其Append()方法。

  • 永远不要直接将字符串写入SQL总是使用参数。所以你的代码必须看起来像这样:

    SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri   Values (@stringvalue,@cnp,@data, @tenvalue)", con);
    
    cmd.Parameters.AddWithValue("@stringvalue", str);
    cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
    cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
    

我认为,通过解决这个问题,您也可以解决问题。

祝你好运。

答案 3 :(得分:0)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MultipleCheckBoxesApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string _concateString = "";
        private void checkBoxButton_Click(object sender, EventArgs e)
        {
            List<string> ourList = new List<string>();
            if (csharpCheckBox.Checked)
            {
                ourList.Add(csharpCheckBox.Text);
            }
            if (javaCheckBox.Checked)
            {
                ourList.Add(javaCheckBox.Text);
            }
            if (cCheckBox.Checked)
            {
                ourList.Add(cCheckBox.Text);
            }
            if (phpCheckBox.Checked)
            {
                ourList.Add(phpCheckBox.Text);
            }
            if (cplusCheckBox.Checked)
            {
                ourList.Add(cplusCheckBox.Text);
            }
            foreach (string checkList in ourList)
            {
                _concateString += checkList + " ,";
            }
            if (_concateString == string.Empty)
            {
                MessageBox.Show("Nothing Checked", "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show(_concateString + " has been checked");
            }

            ourList.Clear();
            _concateString = string.Empty;



        }
    }
}