[英]ValueMember from ComboBox to int
我在组合框中有valueMember,我需要将此值保存为整数...这是我的代码:
public class Benzinky
{
public int B_cislo { get; set; }
public string Benzinka { get; set; }
}
var lines = File.ReadAllLines(@"C:...\pokus.txt");
var data = lines.Select(l => l.Split());
List<Benzinky> allB = data.Where(arr => arr.Length >= 2
&& arr[1].Trim().All(Char.IsDigit))
.Select(arr =>
new Benzinky
{
Benzinka = arr[0].Trim(),
B_cislo = int.Parse(arr[1].Trim())
})
.ToList();
var bindingSourceB = new BindingSource();
bindingSourceB.DataSource = allB;
comboBox1.DataSource = bindingSourceB;
comboBox1.ValueMember = "B_cislo";
comboBox1.DisplayMember = "Benzinka";
我的txt:
Prague 3106
Berlin 3107
........
你有什么想法吗?
您应该将comboBox1的valueMember转换为整数,然后将结果放入Number
。 这可以通过多种方式完成,您可以使用Convert.ToInt32();
但是我来看看Int32.Parse()
和Int32.TryParse()
Int32.Parse
Number = Int32.Parse(comboBox1.ValueMember);
上面的代码可以解决问题,但是当字符串不包含可以解析为整数的值时,您会遇到麻烦,将引发异常。
如果您想获取布尔值而不是异常,则可以使用Int32.TryParse
。
Int32.TryParse
int Number;
bool result = Int32.TryParse(comboBox1.ValueMember, out Number);
if (result)
{
Console.WriteLine("Converted '{0}' to {1}.", comboBox1.ValueMember, Number);
}
else
{
//conversion failed
//Int32.Parse, would throw a formatexception here.
}
您可以尝试以下代码:
comboBox1.DataSource = bindingSourceB;
comboBox1.ValueMember = "B_cislo";
comboBox1.DisplayMember = "Benzinka";
int Number;
if(Int32.TryParse(comboBox1.ValueMember, out Number))
{
//Conversion succeeded
}
else
{
//Conversion failed, you should send a message to the user
//Or fill Number with a default value, your choice.
}
资料来源:
ValueMember
仅用于确定组合框SelectedValue的值。 要获取ComboBox item
的valueMember
部分,必须将基础项(在示例中为Benzinky
类型)转换为正确的类型,并从某些属性中获得所需的值,如果您知道,则应按以下步骤进行操作底层数据类型和valueMember
事先为:
int x = ((Benzinky) comboBox1.Items[index]).B_cislo;
//or using dynamic
dynamic item = comboBox1.Items[index];
int x = item.B_cislo;
但是,如果您想要动态的东西(当valueMember
可能在某个时间以valueMember
方式更改时会发生),则必须像这样使用Reflection
:
object item = comboBox1.Items[index];
var x = (int) item.GetType().GetProperty(comboBox1.ValueMember)
.GetValue(item, null);
注意 :但是,仅当comboBox的DataSource
不是DataTable
类的类时, Reflection
方法才适用。因为DataTable
将其Column name
公开为ValueMember
而不是其任何属性,因此基础项将是DataRowView
,因此在这种情况下反射代码将失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.