我有一个由几个用户ID组成的dropdowncheckbox。现在,在选择一个用户时,它将显示2个列表框,Listbox1具有一个条形码列表,而Listbox2包含已分配给该用户的条形码。从listbox1需要选择多个项目并将其分配给用户。现在,我想针对所选条形码更新所选的userid列。每个条形码在数据库中的不同行中。我试过了:

protected void assign_Click(object sender, EventArgs e)
{
    try
    {
        if (ListBox1.SelectedIndex == -1)
        {
            Label9.Text = "Please Select Barcodes";
        }
        else
        {
            foreach (ListItem item in ListBox1.Items)
            {
                if (item.Selected == true)
                {
                    ListBox2.Items.Add(item);
                    ListBox1.Items.Remove(ListBox1.SelectedItem);
                }
            }

        }
    }
    catch { //Some code }
    finally
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);

        string cmdtxt= "Update " + con.Database + " set AssgnId= @userid where barcode= @barcode ";

        SqlCommand cmd = new SqlCommand(cmdtxt,con);
        cmd.Parameters.AddWithValue("@userid", ddchkteachers2.SelectedItem.Value);
        cmd.Parameters.AddWithValue("@barcode", ListBox1.SelectedItem);

        con.Open();

        foreach (ListItem item in ListBox1.Items)
        {
            if (item.Selected == true)
            {
                cmd.Parameters["@barcode"].Value = Convert.ToString(ListBox1.SelectedItem);
                cmd.ExecuteNonQuery();
            }
        }
        con.Close();
    }
}


选定的条形码位于数据库的nvarchar()列中。如何转换? userid列中与条形码相对应的当前值为Null。代码不会更新。

最佳答案

您正在通过检查是否已从第一个ListBox1中的loop中删除​​项目,而在第二个loop中,您正在执行相同的操作。这意味着在第二个循环中的ListBox1中将没有任何值。您可以在循环中放入breakpoint并验证其值。

语句执行后,

cmd.Parameters.AddWithValue("@barcode", ListBox1.SelectedItem);


ListBox1.SelectedItem中什么都没有,foreach循环中也是如此。
希望能帮助到你。

关于c# - 如何在数据库的nvarchar()列的不同行中更新列表框的多个选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42105929/

10-10 23:28