DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASP.NETでデータベースの内容を取得するには

環境/言語:[Win2000 VS.NET2003]
分類:[ASP.NET]

はじめましてこんばんは。
開発環境はWin2000 VS.NET2003 ASP.NETです。

質問に入る前に今分かっている状況を記述させてもらいます。

現在データベースファイルに

----------------------------------------------
| ID | Data1 | Data2 | Data3 | Data4 | Data5 |
----------------------------------------------
| 1 | 11111 | 22222 | 33333 | 44444 | 55555 |
----------------------------------------------
| 2 | 66666 | 77777 | 88888 | 99999 | 00000 |
----------------------------------------------
| 3 | aaaaa | bbbbb | ccccc | ddddd | eeeee |
----------------------------------------------

上記のような内容が入力してあります。

そこでVB.NETでtest.aspxという物を作ってDataGridを仕様して画面に下記のような物を作りました。

----------------------------------------------
| ID | Data1 | Data2 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 1 | 11111 | 22222 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 2 | 66666 | 77777 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 3 | aaaaa | bbbbb | 編集 | 削除 | 詳細 |
----------------------------------------------

「編集」「削除」「詳細」というのはボタンで作成していてこんな感じで表示していています。
クエリの方にも入力しているのでデータベースを編集したり削除したりすることは出来るのですが詳細ボタンを押した時の処理だけどうしてもうまく出来ません。
詳細ボタンを押したら現在表示しているData1 Data2だけではなくそのレコードの全情報(Data3とData4とData5)も表示させたいのですがうまく表示されません。

以下はID1番の詳細ボタンを押した時に表示したい情報です。

----------------------------------------------
| 1 | 11111 | 22222 | 33333 | 44444 | 55555 |
----------------------------------------------

どのようにしてデータベースのレコードを取得してきたら良いでしょうか?
分かり肉説明ですがどうかよろしくお願いいたします。
お世話になります。

■No13539に返信(ヒトデさんの記事)
Data1〜Data5(つまりすべてのカラムに対する情報)
は既に取得されてから、| ID | Data1 | Data2 | 編集 | 削除 | 詳細 |
を表示されているのでしょうか?
それとも、
詳細ボタンを押下してから、
Data3とData4とData5を取りに行く感じでしょうか。

また、詳細ボタンを押下した時に詳細情報を出すとの事ですが、
別画面ですか?同一画面内ですか?
早速の返信ありがとうございます。

全てのカラムに対する情報は取得していなくて詳細ボタンを押してからData3〜Data5のデータを取りに行く形で考えています。


詳細ボタンを押した時に出す情報は


----------------------------------------------
| ID | Data1 | Data2 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 1 | 11111 | 22222 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 2 | 66666 | 77777 | 編集 | 削除 | 詳細 |
----------------------------------------------
| 3 | aaaaa | bbbbb | 編集 | 削除 | 詳細 |
----------------------------------------------


上記の表の上にテキスト形式で

ID:1
Data1:1111
Data2:2222
Data3:3333
Data4:4444
Data5:5555

のように表示したいと思います。


分かりにくい説明だと思いますがよろしくお願いいたします。
2005/10/29(Sat) 01:59:34 編集(投稿者)

お世話になります。
■No13541に返信(ヒトデさんの記事)
私の環境が今、Web Matrixなので、
若干違う箇所はあるかとは思いますが、
↓こんな感じはいかがでしょうか。
(1)Page_Loadの時に、全部取ってきてしまって、
  Sessionに"MyData"というキーで保存しておく。
(2)選択ボタンが押下された時のイベントで
  DataTable.Select("Where条件文みたいなもの")をやって、
  欲しいDataRowを取得し、表示する。

多分
都度、DBに値を取りにいくのはあまり効率的でないような気がしますが
いかがでしょうか…。

以下、コード
<html>
<head>
</head>
<body>
<form runat="server">
<asp:DataGrid id="DataGrid1" runat="server" OnItemCommand="DataGrid1_ItemCommand">
<Columns>
<asp:ButtonColumn Text="選択" HeaderText="選択" CommandName="Select"></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
<asp:Label id="Label1" runat="server">Label</asp:Label>
</form>
</body>
</html>
======================================================================
Sub Page_Load(sender As Object, e As EventArgs)
  If Not IsPostBack Then
   '実際にはここでDataBaseより取ってくる。
    Dim dt As System.Data.DataTable
    dt = New System.Data.DataTable()
    dt.Columns.Add("ID", GetType(Integer))
    dt.Columns.Add("Field1", GetType(String))
    dt.Columns.Add("Field2", GetType(String))
    dt.Columns.Add("Field3", GetType(String))
    dt.Columns.Add("Field4", GetType(String))
    dt.Columns.Add("Field5", GetType(String))
    dt.Rows.Add(New Object() {1,"a","b","c","d","e"})
    dt.Rows.Add(New Object() {2,"2a","2b","2c","2d","2e"})
    Session("MyData") = dt 'Sessionに入れる
    
    '表示用のDataTableを作成する
    Dim viewDT As System.Data.DataTable = dt.Clone()
    For Each r As System.Data.DataRow In dt.Rows
      viewDT.ImportRow(r)
    Next
    viewDT.Columns.Remove("Field3")
    viewDT.Columns.Remove("Field4")
    viewDT.Columns.Remove("Field5")
    Me.DataGrid1.DataSource = viewDT
    Me.DataGrid1.DataBind()
  End if
End Sub

Sub DataGrid1_ItemCommand(sender As Object, e As DataGridCommandEventArgs)
  If e.CommandName = "Select" Then
    Dim id As String = e.Item.Cells(1).Text
    dim dt As System.Data.DataTable = DirectCast(Session("MyData"), System.Data.DataTable)
    Dim rows() As System.Data.DataRow = dt.Select("ID="+id)
    If rows.Length = 1 Then
      Dim row As System.Data.DataRow = rows(0)

      Me.Label1.Text = "ID is" + CType(row(0), String) + "<br>" _
               + "Field1 is :" + CType(row(1), String) + "<br>" _
               + "Field2 is :" + CType(row(2), String) + "<br>" _
               + "Field3 is :" + CType(row(3), String) + "<br>" _
               + "Field4 is :" + CType(row(4), String) + "<br>" _
               + "Field5 is :" + CType(row(5), String)
    Else
      Me.Label1.Text = "Data Nothing"
    End If
  End If
End Sub
返信遅くなって申し訳ありません。
詳しい説明ありがとうございます。
今、外出先で開発環境がないため試してみることが出来ませんが夜戻ってみて試してみたいと思います。
後ほど報告・お礼などの書き込みをさせていただきたいと思います。
取り急ぎ失礼します。
またまた返信遅くなって申し訳ありません。
詳しく説明していただいたおかげで実行することが出来ました。
この度は本当にありがとうございました。
またお世話になることがあるかもしれませんがそのときは是非よろしくお願いいたしますm(._.*)m
解決済み!
2005/10/31(Mon) 13:38:38 編集(投稿者)

解決されているようですが、少し補足を。
DataGrid側で表示する列を選択すればよいので、データテーブルは一つでもかまわないと思います。また、DataGridにはDataKeysというものがありますので、これを使われても良いでしょう。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板