投稿者 Norimasa  (学生) 投稿日時 2010/5/31 18:25:33
こんにちわ。Norimasaです。


先日はありがとうございました。VBとDB間の読み書きはできるようになりました。

今はDetaSetを勉強していますが、どうしても分からない所があり、またお伺いさせていただきました。


環境:XP-pro/VB2005/SQLServer2005


前回と同じでScheduleList管理システムを作っています。

画面は左右で割ると

左側に、 
---------------------------------------------------------------------
         MonthCalendar、

日にちを表すStartDateTextBox/開始時間を表すDomainUpDown
                                           /終了時間を表すDomainUpDown

件名を入力するSubjectTextBox
内容を入力するContentsTextBox
登録ボタン

右側に、
-----------------------------------------------------------
        スケジュールを表示するshortscheduleListBox
               修正ボタン/削除ボタン

となっております。




日にち時間、件名、内容を記入して登録ボタンを押すと、shortscheduleListBoxに表示され、同時にDBも書き込まれるようになっています。

shortscheduleListBoxに表示されるのは

開始時間~終了時間 件名 内容

です。

カレンダーをクリックするとDBからその日の日付の予定をshortscheduleListBoxに表示できるようにしました。



修正ボタンを押すと別のフォームUpdateFormへ行き、修正専用の画面が出るようにしています。(まだ画面が出るだけの状態です)

修正画面は本画面の左側と同じでカレンダーがないバージョンです。



・今回分からない部分というのは、

カレンダーをクリックしListBox上にデータを表示させ、そのデータを仮に

16:00~17:00  第1回(件名)  会議(内容)

としたとき、選択肢し修正ボタンをクリックしたら、修正画面になり、

修正画面
------------------------------------------------------------------

日にちTextBox:2010/05/31  / 開始時刻Text:16:00
                  /終了時刻Text:17:00

          件名TextBox:第1回
           内容TextBox:会議

---------------------------------------------------------------------

と表示されている状態にしたいです。

現状のコードは、

Private Sub RefreshListBox()

        Dim Connection As New SqlConnection()
        Dim Command As New SqlCommand()
        Dim DataSet As New DataSet("Short")
        Dim SQLAdapter As New SqlDataAdapter()

        '接続文字列の取得
        Connection.ConnectionString = "Data Source=サーバー名;Initial Catalog=ScheduleList;Integrated Security=True"
        'コネクションの定義
        Command.Connection = Connection
        Try
            Command.CommandText = "SELECT start + '~' + [end] + ': ' + subject + ' ' + contents as schedule FROM Short WHERE startdate = '" & startdate & "'"
            'データを取得する
            SQLAdapter.SelectCommand = Command
            DataSet.Clear()
            SQLAdapter.Fill(DataSet)
            'リストボックスに列別名scheduleを表示できるようにする。
            Me.shortscheduleListBox.DisplayMember = "schedule"
            'リストボックスにShortテーブルのデータを連結する。
            Me.shortscheduleListBox.DataSource = DataSet.Tables(DataSet.Tables(0).ToString)

        Catch ex As Exception
            MsgBox("エラー")
        End Try

            End Sub

これがカレンダーをクリックしたらその日付の予定を表示させるメソッドです。
複数行表示させなければならないのでDataSetを使いました。


Private Sub shortupdateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles shortupdateButton.Click
                Dim UpDateForm As UpdateDate = New UpdateDate()

        Dim DataSet As DataSet = DirectCast(Me.shortscheduleListBox.DataSource, DataSet)


        Dim Row As DataRow
        Dim Value As String

        Value = Row("startdate")
        UpDateForm.startdateTextBox.Text = Value
        UpDateForm.ShowDialog()

これが途中ですが修正ボタンプロシージャになります。
まず、StartDateだけでも修正画面に表示させようと思い中途半端ですが、こんな感じです。

shortscheduleListBoxのDataSourceからDataSetを取得し、startdate列を指定し、UpDateForm(修正画面)のstartTextに代入させ、ShowDialogで開くという風に記述しました。

これだと、行の指定がないからかInvalidCastException 例外がでます。

この先どう記述していいか分からない状態です。



・どうしたいか
選択した予定を修正画面に移して行きたいので、どういった感じで記述するのかを教えていただきたいです。




長文になり、また至らぬ点もあるかもしれませんが、ご指導お願いいたします。