- PR -

SelectedValueとSelectedIndex

1
投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-10-02 17:23
お世話になっています。

VB2005tでアプリを開発しています。

Datasetには2つフィールドがあり、
[処理区分]と[処理区分名]が格納されています。

で、ComboboxのDataSourceにDatasetをセットし、
CombobxのValueMemberに[処理区分]を、DisplayMemberに[処理区分名]を指定します。

内容は
処理区分
1
2
3
4
処理区分名
新規
修正
削除
照会
です

そこで、Comboboxの処理選択に応じた処理を実行する為

Combobox_SelectedValueChangedイベントプロシージャを
コーディングしました。

Combobox_SelectedValueChanged
Select Case Combobox.SelectedValue
Case 1
新規の処理
Case 2
       修正の処理   
Case 3
      削除の処理   
Case 4
     照会の処理
End Select
End Sub

の Case 1のところで

演算子 '=' は 型 'DataRowView' と 型 'Integer' に対して定義されていません。
のエラーになってしまいます。

Select Case Combobox.SelectedIndex
Case 1
新規の処理
Case 2
       修正の処理   
Case 3
      削除の処理   
Case 4
     照会の処理
End Select

とSelectedIndex するとOKなのですが。

しかしSelectedValueを使うべきかと思うのですが...

対応等教えて頂けないでしょうか?

宜しくお願い致します。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-10-02 17:39
さかもとと申します。

Case 1

の「1」がInteger型だから、ということではなくてでしょうか・・・?


_________________
------------------------------------------
拝啓、さかもとと申します♪
ta-
会議室デビュー日: 2007/10/02
投稿数: 4
投稿日時: 2007-10-02 18:11
なびさん

おそらく原因は
DataSourceにDataSetをバインドした時にイベントが走る。
このときValueMemberが「処理区分」だと確定していない
その場合ValueMemberの型がDataRowViewになっている。

ためだと思います

解決策として

1、イベントをSelectionChangeCommittedに代える
  
2、DataSourceをバインドする前に、ValueMember = 「処理区分」と書く
  
3、SelectedValueChangedイベントのハンドルを解除し
  DataSourceをバインドした後にaddHandlerで指定する

微妙に挙動が変わってきますので確認願います。

ta-
会議室デビュー日: 2007/10/02
投稿数: 4
投稿日時: 2007-10-02 18:13
すいません
1、2、3は順番に行なうのではなく
どれか1つという意味です、
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-10-02 20:59
解決方法のチョイスはお任せしますが、

引用:

ta-さんの書き込み (2007-10-02 18:11) より:

2、DataSourceをバインドする前に、ValueMember = 「処理区分」と書く


これに関してはこのとおりしておいた方が良いです。 他人の手に渡った時 (改変される時に) 悩みの温床になりやすい箇所です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-10-03 11:06
おはようございます。

すごいですね。

DataSourceをバインドする前に、ValueMember = 「処理区分」と書く

で解決してしまいました。
1

スキルアップ/キャリアアップ(JOB@IT)