C# 从ComboBox到int的ValueMember
组合框中有valueMember,我需要将此值保存为整数。。。 这是我的代码:C# 从ComboBox到int的ValueMember,c#,winforms,combobox,C#,Winforms,Combobox,组合框中有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<Benz
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";
您有什么想法吗?您应该将comboBox1的valueMember转换为整数,并将结果放入Number
。这可以通过多种方式完成,您可以使用Convert.ToInt32()代码>
但是我想看看Int32.Parse()
和Int32.TryParse()
Int32.Parse
Number = Int32.Parse(comboBox1.ValueMember);
上面的代码应该可以做到这一点,但是当字符串不包含可以解析为整数的值时,就会引发异常
如果希望得到一个bool值作为返回而不是异常,可以使用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.
}
资料来源:
您应该将comboBox1的valueMember转换为整数,并将结果放入Number
。这可以通过多种方式完成,您可以使用Convert.ToInt32()代码>
但是我想看看Int32.Parse()
和Int32.TryParse()
Int32.Parse
Number = Int32.Parse(comboBox1.ValueMember);
上面的代码应该可以做到这一点,但是当字符串不包含可以解析为整数的值时,就会引发异常
如果希望得到一个bool值作为返回而不是异常,可以使用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
仅用于确定组合框所选值的值。要获取组合框项的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
可能在某个时间按程序更改时发生),则必须使用Reflection
,如下所示:
object item = comboBox1.Items[index];
var x = (int) item.GetType().GetProperty(comboBox1.ValueMember)
.GetValue(item, null);
注意:但是,反射
方法仅在组合框的数据源
不是类似于数据表
的类时适用,因为数据表
将其列名
公开为值成员
而不是其任何属性,基础项将是一个数据行视图
,因此在这种情况下,反射代码将失败。ValueMember
仅用于确定组合框的值SelectedValue。要获取组合框项的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
可能在某个时间按程序更改时发生),则必须使用Reflection
,如下所示:
object item = comboBox1.Items[index];
var x = (int) item.GetType().GetProperty(comboBox1.ValueMember)
.GetValue(item, null);
注意:但是,反射
方法仅在组合框的数据源
不是类似于数据表
的类时适用,因为数据表
将其列名
公开为值成员
而不是其任何属性,底层项目将是一个DataRowView
,因此在这种情况下,反射代码将失败。谢谢。我有这些数字,例如:3106或3101……当我使用Parse时,我有一个错误:输入字符串的格式不正确……当我使用Tryparse时,我有数字00,而不是我的3106.::我可以看到您正在用“B_cislo”填充comboBox1.ValueMember,因此它总是无法转换,因为它不是可解析的int-valueThank。我有这些数字,例如:3106或3101……当我使用Parse时,我有错误:输入字符串的格式不正确……当我使用Tryparse时,我有数字00,而不是我的3106.::我可以看到您正在用“B_cislo”填充comboBox1.ValueMember,因此它总是无法转换,因为它不是可解析的int值