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;
また、DataGridView内のすべてのアカウントを一覧表示するルーチンDisplayAccounts()がありますが、選択されている場合はコンボで選択された値でフィルタリングされ、選択されていない場合はすべてのアカウントが表示されます。これは非常に簡単だと思い、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#にかなり慣れていないので、私の愚かさを許さなければなりません!