根据数据库值预先选择列表框中的多个项目
本文关键字:项目 列表 选择 数据库 | 更新日期: 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);
在这种情况下,将预先选择第一个和第二个值。
如果你需要一个更好的例子。