• ベストアンサー

dropdownlistのvalue値の取得方法について

VS2005 WinXP pro 下のようにページ表示時にDropDownListに年を入れています。 しかし、DropDownListを何に変更してもSelectedIndexした 値が取れてしまい困っています (今なら常に2008が取れてしまう) 本当なら2009を選択したときは下の関数で 2009と表示したいのです。 お力添えお願いいたします。 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '-------------------------------------------------------------------------------------- ' 年をコンボボックスに追加 '-------------------------------------------------------------------------------------- Dim sNum As Integer = 0 Dim y As Integer For y = 2007 To Year(Now) + 3 cmbYear.Items.Add(New ListItem(y, y)) If y = Year(Now) Then cmbYear.SelectedIndex = sNum ←ここを消すと正しく動く End If sNum += 1 Next End Sub Protected Sub btnEdit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEdit.Click '-------------------------------------------------------------------------------------- ' 選択項目の取得 '-------------------------------------------------------------------------------------- MsgBox(cmbYear.Items.Item(cmbYear.SelectedIndex).Value) 2008 MsgBox(cmbYear.SelectedValue) ←2008 どちらも2008 End Sub 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Page_Loadイベントのなかで コンボボックスを設定する際に PostBackしてきたのかそれとも初めてPage_Loadが呼ばれたのかを判断しましょう Asp.NETの場合 PostBack時にもPage_Loadイベントが呼ばれます Page_Loadの初期化処理を if IsPostBack = False then   ' 初めて呼ばれた場合   ' ここでコンボボックスの初期設定を行う Else   ' 何かのユーザーアクションなどによりPostBackした場合 End if といった具合しましょう

diolab
質問者

お礼

ありがとうございますー! 教えていただいたとおりで解決しました. ポストバック・・・・ 覚えておきます! 返信遅くなってしまいすいませんでした.

その他の回答 (1)

  • Rel
  • ベストアンサー率70% (7/10)
回答No.2

Page_Loadイベントは、表示時に必ず実行されるので btnEdit_Clickイベント後の再表示(PostBack時)で また、「2008」を設定しているのではないでしょうか? *Page_Loadイベントにブレイクポイントを張って確認してみては いかがでしょうか? redfox63さんの言う様に、btnEdit_Clickイベント後の再表示 (PostBack時)では「2008」をセットしないようにすれば 良いのでは?と思います。

diolab
質問者

お礼

はい!ありがとうございます. おかげさまで解決で着ました.