Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ComboBox到int的ValueMember_C#_Winforms_Combobox - Fatal编程技术网

C# 从ComboBox到int的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

组合框中有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";
您有什么想法吗?

您应该将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值