设置 SelectedValue 后 C# 列表框值为空
C# Listbox Value is Null After Setting SelectedValue
我创建了一个基于数据库 table 的列表框,其中列表框的 DisplayMember 项是通过字符串连接创建的,而 ValueMember 项表示来自 table 的 bigInt PK。列表框绑定到 Text/Value 对象,如下所示。
List<ComboSearchItems> csi = new List<ComboSearchItems>();
foreach(var i in q)
{
ComboSearchItems ci = new ComboSearchItems(String.Concat(i.Id, " - ", i.Name, " - ", i.CompanyName), i.Id);
csi.Add(ci);
}
lstCompany.DataSource = csi;
lstCompany.DisplayMember = "Text";
lstCompany.ValueMember = "Value";
lstCompany.SelectedIndex = 0;
lstCompany.Refresh();
public class ComboSearchItems
{
public string Text { get; set; }
public Int64 Value { get; set; }
//Constructor
public ComboSearchItems(string t, Int64 v)
{
Text = t;
Value = v;
}
}
列表框已填充并正确显示,但是当我尝试通过下面的代码设置 SelectedValue 属性 时,列表框的 SelectedValue 更改为 null。
lstCompany.SelectedValue = 16844;
设置值为整数的列表框的SelectedValue时,新值必须是同一类型的整数。尝试在不明确发送 Int64 类型的情况下设置 Int64 值将导致静默失败,从而导致列表框的 SelectedValue 被设置为 null。
以下示例将设置 SelectedValue
lstCompany.SelectedValue = Convert.ToInt64(4251);
lstCompany.SelectedValue = 4251L;
以下代码将自动失败并将列表框的 SelectedValue 设置为 null
lstCompany.SelectedValue = 4251;
我创建了一个基于数据库 table 的列表框,其中列表框的 DisplayMember 项是通过字符串连接创建的,而 ValueMember 项表示来自 table 的 bigInt PK。列表框绑定到 Text/Value 对象,如下所示。
List<ComboSearchItems> csi = new List<ComboSearchItems>();
foreach(var i in q)
{
ComboSearchItems ci = new ComboSearchItems(String.Concat(i.Id, " - ", i.Name, " - ", i.CompanyName), i.Id);
csi.Add(ci);
}
lstCompany.DataSource = csi;
lstCompany.DisplayMember = "Text";
lstCompany.ValueMember = "Value";
lstCompany.SelectedIndex = 0;
lstCompany.Refresh();
public class ComboSearchItems
{
public string Text { get; set; }
public Int64 Value { get; set; }
//Constructor
public ComboSearchItems(string t, Int64 v)
{
Text = t;
Value = v;
}
}
列表框已填充并正确显示,但是当我尝试通过下面的代码设置 SelectedValue 属性 时,列表框的 SelectedValue 更改为 null。
lstCompany.SelectedValue = 16844;
设置值为整数的列表框的SelectedValue时,新值必须是同一类型的整数。尝试在不明确发送 Int64 类型的情况下设置 Int64 值将导致静默失败,从而导致列表框的 SelectedValue 被设置为 null。
以下示例将设置 SelectedValue
lstCompany.SelectedValue = Convert.ToInt64(4251);
lstCompany.SelectedValue = 4251L;
以下代码将自动失败并将列表框的 SelectedValue 设置为 null
lstCompany.SelectedValue = 4251;