- PR -

DropDownListの初期値を変えたい

投稿者投稿内容
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 11:39
できました!

WEBで検索をかけたら同じような質問を発見することができ、やってみたら♪♪♪♪
結局↓の回答を参考に作成しました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=40985&forum=7

Page_Load内ではなく、PreRenderで処理を行うことでできました。
出来た実際のコードを載せておきます。
コード:
Menu5.aspx.vb
Partial Class Menu5
    Inherits System.Web.UI.Page

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Master.SetActiveMenu(5)
    End Sub

    Protected Sub DropDownList1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.PreRender
        If Not Page.IsPostBack Then
            DropDownList1.SelectedValue = Convert.ToInt16(Year(Today()))
        End If
    End Sub

    Protected Sub DropDownList2_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.PreRender
        If Not Page.IsPostBack Then
            DropDownList2.SelectedValue = Convert.ToInt16(Month(Today()))
        End If
    End Sub
End Class



よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-08-26 11:50
んー・・・、DropDownList の PreRender イベントのかわりに最初に示した DropDownList の DataBound イベントを使ってみるとどうなりますか?
_________________
C#と諸々
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 13:05
よこけんさん>
DataBoundで、ですね!ちょっと試してみます。
しばしお待ちを…
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 13:14
よこけんさん>
DataBoundでもできました!
DataBoundの意味(というか記述方法)がわかってなかったので遠回りしましたが
最初に教えていただいた内容で出来たようです。
お騒がせしました。(,_,)

DataBound版のコードも記述しておきます。(PreRenderと一緒ですが…)
コード:
Partial Class Menu5
    Inherits System.Web.UI.Page

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Master.SetActiveMenu(5)
    End Sub

    Protected Sub DropDownList1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.DataBound
        If Not Page.IsPostBack Then
            DropDownList1.SelectedValue = Convert.ToInt16(Year(Today()))
        End If
    End Sub

    Protected Sub DropDownList2_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.DataBound
        If Not Page.IsPostBack Then
            DropDownList2.SelectedValue = Convert.ToInt16(Month(Today()))
        End If
    End Sub
End Class



ありがとうございました。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-08-26 13:36
(追記)すみません、もしかしたら今回のケースには当てはまらないかもなので↓は取り消します。

---------------ここから取り消し-------------------
DataBound イベントを使用する場合は、IsPostBack をチェックして分岐させる必要ありません。
データバインドは PreRender 時に実行されますが、データバインドは毎回実行されるわけではなく、
データを再取得する必要がある時だけ実行されるからです。
今回の場合、PreRender イベントを使用するより DataBound イベントを使用した方が適切かなぁと思います。
_________________
C#と諸々

[ メッセージ編集済み 編集者: よこけん 編集日時 2008-08-26 13:39 ]
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 13:39
わかりました。
DataBoundとPreRenderの違いについて、もう少し勉強します。
とにかく今回はDataBoundのほうが良いとのこと。
PostBack処理をはずして、完成形にしたいと思います。
本当にありがとうございました。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-08-26 14:11
間に合わなかった orz

一個前の投稿の追記で書きましたが、
もしかしたら今回のケースでは IsPostBack を
チェックする必要があるかもしれません。

「年」を変更した時などに、「月」の選択値が期待どおりの選択値になっているかどうか
念のため確認してください。
問題がなければ、IsPostBack は不要となります。

# どちらにせよ、PreRender イベントより DataBound イベントにした方がいいとは思います。
_________________
C#と諸々
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2008-08-26 14:51
追記、ありがとうございます。
IsPostBackの必要性ですが、動作確認をしたところ以下のようになりました。

■テストデータ
2008/6/1〜2009/7/31を作成

■年について(IsPostBackなし)
取得値:2008,2009の2種類のため、PostBackがなくても正常動作

■月について(IsPostBackなし)
年が2008のときの取得値:6〜12
(初回はPostBackなしでも正常動作)
年が2009のときの取得値:1〜7
(2008年8月から2009年に変更すると、2009年8月を選択しにいくため、異常終了(存在しないレコードのため))
 同じく
(2009年1月から2008年に変更すると、2008年1月を選択しにいくため、異常終了(同上))

▼IsPostBackをつけた場合、
(2008年8月から2009年に変更すると、2009年1月を表示しにいくため、正常動作)
(2009年1月から2008年に変更すると、2008年6月を表示しにいくため、正常動作)

ということで、月にはIsPostBackが必要なことがわかりました。
ありがとうごさいます。

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