我有一个列表框,在加载页面时,我想选择数据库中的选项/选项。已经有一段时间了,因为我已经对列表框做了任何事情,所以我对如何修复我的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();
}
}
}
}
答案 0 :(得分:2)
您必须循环所有项目并相应地设置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);
除此之外,你应该小心SqlParameter
构造函数,它带有两个参数,如果第二个是int
,就像这里:
md.Parameters.Add(new SqlParameter("@VendorId", VendorId));
VendorId
将投放到SqlDbType
并使用different overload。相反,您应该明确指定Value
:
md.Parameters.Add(new SqlParameter("@VendorId", SqlDbType.Int) { Value = VendorId });
修改:remarks-section:
中也记录了这一点使用
SqlParameter
构造函数的此重载时请小心 指定integer
参数值。因为这个过载需要一个 类型Object
的值,必须将整数值转换为Object 当值为零时键入,如下面的C#示例所示。
Parameter = new SqlParameter("@pname", (object)0);
如果你不这样做 执行此转换,编译器假定您正在尝试 调用SqlParameter(string,SqlDbType)构造函数重载。
所以这也可以:
md.Parameters.Add(new SqlParameter("@VendorId", (object) VendorId));
答案 1 :(得分:0)
检查ListBox的SelectionMode属性是否为Multiple,这将启用多项选择。
e.g
<asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple"></asp:ListBox>