如何在ComboBox中选择任何内容时判断

时间:2012-09-12 13:54:47

标签: c# .net combobox

我有一个由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#还不熟悉所以你不得不原谅我的愚蠢!

1 个答案:

答案 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);