我有一个由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.如果我跳过此步骤并在选择值时进行测试,则会返回预期的整数值。
因此,我的问题是为什么当所选索引被认为是0时超过if (this.cboAdminLocation.SelectedIndex > -1)
测试,并且当我在填充控件时将其显式设置为-1时为什么选择索引为0 ?
我很欣赏这可能很简单,但我对C#还不熟悉所以你不得不原谅我的愚蠢!
答案 0 :(得分:1)
因此,我的问题是为什么当所选索引被认为是0时,通过if(this.cboAdminLocation.SelectedIndex> -1)测试,并且当我明确地设置它时,为什么选择的索引为0填充控件时为-1?
这是因为您首先填充了comboBox,然后将所选索引设置为-1
。在这两个步骤之间,所选索引是 - 0
。
为了纠正错误,您只能在运行DisplayAccounts()
后调用cbo.SelectedIndex = -1;
例行程序。我想你在comboBox的SelectedIndexChanged事件中调用DisplayAccounts()
。如果是这样,请将事件附加到后面的comboBox(如果您在Designer窗口中添加了事件,请务必将其从 Designer.cs 文件中删除):
//...
cbo = this.cboAdminLocation;
cbo.DataSource = locations;
cbo.DisplayMember = "Location";
cbo.ValueMember = "LocationID";
cbo.SelectedIndex = -1;
cbo.SelectedIndexChanged += new EventHandler(cbo_SelectedIndexChanged);