根据数据库值预先选择列表框中的多个项目

本文关键字:项目 列表 选择 数据库 | 更新日期: 2023-09-27 18:24:14

我有一个列表框,在加载页面时,我希望已经选择了数据库中的选项。我已经有一段时间没有用列表框做任何事情了,所以我有点困惑于如何修复我的GetClassification函数的代码,它正是为了做到这一点。目前,它只在列表框中选择一个值,而不管供应商id与多个值相关联。

这是GetClassification函数的代码:

protected void GetClassification(int VendorId)
{
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        SqlCommand cmd = new SqlCommand("SELECT uidClassification FROM Baird_Vendors_Extension WHERE uidVendor = @VendorId", cn);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add(new SqlParameter("@VendorId", VendorId));
        cn.Open();
        using (IDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                vendorType.SelectedValue =reader["uidClassification"].ToString();
            }
        }
    }
}

根据数据库值预先选择列表框中的多个项目

您必须循环所有项目并相应地设置Selected-属性:

List<string> uidClassificationList = new List<string>();
using (IDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        int column = reader.GetOrdinal("uidClassification");
        uidClassificationList.Add(reader.GetInt32( column ).ToString());
    }
}
foreach(ListItem item in vendorType.Items)
    item.Selected = uidClassificationList.Contains(item.Value);

除此之外,如果第二个参数是int,那么您应该小心使用SqlParameter构造函数,该构造函数需要两个参数,如下所示:

md.Parameters.Add(new SqlParameter("@VendorId", VendorId));

VendorId将被广播到SqlDbType,并且使用不同的过载。相反,您应该明确指定Value

md.Parameters.Add(new SqlParameter("@VendorId", SqlDbType.Int) { Value = VendorId });

编辑:这也记录在备注部分:

使用SqlParameter构造函数的此重载时请小心以指定CCD_ 8参数值。因为这种过载需要类型为Object的值,则必须将整数值转换为Object当值为零时键入,如下面的C#示例所示。

Parameter = new SqlParameter("@pname", (object)0); 

如果没有执行此转换时,编译器假定您正在尝试调用SqlParameter(string,SqlDbType)构造函数重载。

所以这也会起作用:

md.Parameters.Add(new SqlParameter("@VendorId", (object) VendorId));

检查ListBox的SelectionMode属性是否给定为Multiple,这将启用多选。

例如

<asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple"></asp:ListBox>

如果有人正在寻找如何从项目(集合)中选择多个值。你需要你的SelectionMode是MultiSimple,然后像这样做,例如

listBoxName.SetSelected(0, true);
listBoxName.SetSelected(1, true);

在这种情况下,将预先选择第一个和第二个值。

如果你需要一个更好的例子。