投稿者 るきお  (社会人) 投稿日時 2010/5/31 22:26:10
こんにちは。
UpDateFormに表示するのはリストボックスの選択されている行ということでよいですよね?

まず、後でstartdateを使うようなので、表示には必要なくても最初にstartdateも取得するように細工しておくとよいです。
そのためにSQL文の行を以下のように修正します。
    
Command.CommandText = "SELECT startdate, start + '~' + [end] + ': ' + subject + ' ' + contents as schedule FROM Short WHERE startdate = '" & startdate & "'"


この細工ができていれば、ストレートに質問に答えてDataRowを取得するには次のようにします。
    
Dim UpDateForm As UpdateDate = New UpdateDate()

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

Dim Row As DataRow = DirectCast(shortscheduleListBox.SelectedItem, DataRowView).Row
Dim Value As String

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


しかし、DataRowを習得するのではなく値を取得したいだけであれば次のように書くこともできます。
    
Dim UpDateForm As UpdateDate = New UpdateDate()
Dim Value As String

Value = shortscheduleListBox.SelectedItem("startdate")
UpDateForm.startdateTextBox.Text = Value
UpDateForm.ShowDialog()


NorimasaさんのプログラムではshortscheduleListBoxに連結されているDataSetから行を手繰り寄せようとしていますが、現在選択されている行を判断・取得する方法がわからないということだと思います。
リストボックス自体に選択されている項目を表すSelectedItemプロパティがあるのでDataSetまでさかのぼらないで直接SelectedItemをとってくるのが早いです。

今回はDataTableとListBoxが連結されているのでSelectedItemの実際の型はDataRowViewになります。SelectedItemの実際の型はListBoxの表示のさせ方により異なります。

それから、shortscheduleListBoxに連結されているのはDataSetではなくDataTableです。
これはNorimasaさん自身が
    
Me.shortscheduleListBox.DataSource = DataSet.Tables(DataSet.Tables(0).ToString)

と書いていることによります。

本題とはずれますがこの記述はやや冗長で次のように書くこともできます。
    
Me.shortscheduleListBox.DataSource = DataSet.Tables(0)


ただ、私ならはじめからDataSetを生成しないでDataTableを直接Fillします。だんだん本題からはずれていくのでこのあたりで。