我在组合框中有值成员,我需要将此值保存为整数... 这是我的代码:
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";
my txt:
Prague 3106
Berlin 3107
........
你有什么想法吗?
答案 0 :(得分:3)
您应该将 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.
}
来源:
答案 1 :(得分:3)
ValueMember
仅用于确定组合框 SelectedValue 的值。要获取valueMember
的{{1}}部分,必须将基础项(在示例中为ComboBox item
类型)转换为正确的类型,并从某个属性中获取所需的值,如果您事先知道基础数据类型和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);
方法仅适用于您的comboBox的Reflection
不是某个类DataSource
的情况,因为DataTable
将DataTable
公开为Column name
而不公开它的任何属性,基础项将是ValueMember
,因此在这种情况下反射代码将失败。