C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# コンボボックスの設定値取得について

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■96486 / inTopicNo.1)  C# コンボボックスの設定値取得について
  
□投稿者/ az (15回)-(2020/12/01(Tue) 16:37:57)

分類:[.NET 全般] 

Visual Studio Express 2017 for Windows Desktopを使用し、
C#でフォームアプリケーションを作成しています。

キーボード入力可能なコンボボックスを作成し、
コンボボックスの入力値が コンボボックス内の選択肢に存在するかどうかを確認するための処理を
以下の通りに実装しました。


cmb…コンボボックス

if (cmb.FindString(cmb.Text) >= 0)
{
  SetXXX(cmb);
}

しかし、cmb.Textの値が "System.Data.DataRowView" となることがあり、if文がtrueで成立してしまう(意図しない処理に進んでしまう)ことがあります。
このような現象が発生する原因と、見直すべき箇所についてご教示いただけないでしょうか。
よろしくお願いします。




引用返信 編集キー/
■96487 / inTopicNo.2)  Re[1]: C# コンボボックスの設定値取得について
□投稿者/ 魔界の仮面弁士 (2930回)-(2020/12/01(Tue) 17:08:56)
No96486 (az さん) に返信
> cmb.Textの値が "System.Data.DataRowView" となることがあり、
どういう時にそうなるのでしょうか?

cmb.Items.Add() でアイテムを追加しているのでしょうか。それとも
cmb.DataSource を設定しているのでしょうか。後者であれば、
cmb.DisplayMember に、DataView または DataTable の列名を指定しましょう。
引用返信 編集キー/
■96502 / inTopicNo.3)  Re[2]: C# コンボボックスの設定値取得について
□投稿者/ az (16回)-(2020/12/02(Wed) 16:19:05)
No96487 (魔界の仮面弁士 さん) に返信

> ■No96486 (az さん) に返信
>>cmb.Textの値が "System.Data.DataRowView" となることがあり、
> どういう時にそうなるのでしょうか?

cmb.DataSourceを設定した後で、
cmb.DisplayMemberを指定しているのですが、SelectedIndexChangedイベント内で
cmb.Textの値が "System.Data.DataRowView" となっていました。

cmb.DataSourceの直後に SelectedIndexChangedイベントが発生するようです。


以下のように実装することで、cmb.Textの値が "System.Data.DataRowView" となる現象は避けられました。


cmb.SelectedIndexChanged -= new EventHandler(cmb_SelectedIndexChanged);
cmb.DataSource = XXX;
cmb.DisplayMember = YYY;

cmb.SelectedIndexChanged += new EventHandler(cmb_SelectedIndexChanged);
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ