我有一个由 LINQ 查询填充的 ComboBox:
var locations =
from loc in db.LOCATIONs
.Where(a => a.Omit == false)
select new
{
LocationID = loc.LocationID,
Location = loc.Location1
};
cbo = this.cboAdminLocation;
cbo.DataSource = locations;
cbo.DisplayMember = "Location";
cbo.ValueMember = "LocationID";
cbo.SelectedIndex = -1;
我还有一个例程 DisplayAccounts(),它列出了 DataGridView 中的所有帐户,但如果选择,则按组合中选择的值进行过滤,如果没有,则显示所有帐户。我认为这将非常简单,并尝试使用 DisplayAccounts() 中的以下语句来处理它:
if (this.cboAdminLocation.SelectedIndex > -1)
filterAdminLocation = Convert.ToInt32(this.cboAdminLocation.SelectedValue.ToString());
else
filterAdminLocation = 0;
在 LINQ 查询结束时:
if (filterAdminLocation > 0)
{
accountData = accountData.Where(a => a.LocationID == filterAdminLocation);
}
但是,我在第一轮循环中(即在有机会从组合中选择一个值之前)出现“输入字符串的格式不正确”的错误,实际上这个阶段的组合值是显示为{ LocationID = 1, Location = "Brentwood" }
并且所选索引为 0。如果我跳过此步骤并在我选择了一个值时进行测试,它会按预期返回一个整数值。
if (this.cboAdminLocation.SelectedIndex > -1)
因此,我的问题是,为什么当所选索引为0时,为什么要超越测试,而当我在填充控件时明确将其明确设置为-1时,为什么选择了所选索引0?
我很欣赏这可能很简单,但我对 C# 还很陌生,所以你必须原谅我的愚蠢!