- - PR -
動的なDataGrid
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-08-25 23:02
Jittaさんありがとうございます。
listbox.item(i).selectedをFor文で回すことで確認できました。お陰様でカラムの選択で表示する事はできました。本当にありがとうございます。 でも、一つ気になってるんですが、自動生成したDataGridに自分で作成したSQL文を反映させるにはどうしたらいいんですか?実は当初の予定ではこれでやりたかったんですど、自動生成のSelectCommandを変更するのってできるのだろうか?って思ってたんです。過去のレスを見たんですけど、勉強不足で書いてあることがよく解らない時がおおいんですよね。 毎回毎回、聞いてすいません。 [ メッセージ編集済み 編集者: es 編集日時 2003-08-25 23:27 ] |
|
投稿日時: 2003-08-26 09:00
ちょっと意味がわかりにくいのですが・・・
選択されたらすぐにDataGridに反映でしたよね?ListBoxのSelectIndexChangedイベントハンドラで、SQL文を作成し、DataTableへDataAdapter経由でFill()します(DataAdapter.Dispose()を忘れずに)。できたDataTableをDataGrid.DataSourceに(DataSetでないとダメだった?)参照させ、DataGrid.DataBind()をコールすると、内容が変わります。 |
|
投稿日時: 2003-08-27 22:47
いつもお世話になってます。
仕様変更になりまして、ASP.NET(VB)で先のページで、以前言っていリストからテーブル、次にカラムを選択して、SQLを作成しまして次のページへそのSELECT文を渡す事になりました。 SELECT文を受け取った側(ページ)でDataGridに表示するのですが、DataTableへDataAdapter経由でFill()をするっていうのは、DataAdapter.Fill(DataSet)とは違うのでしょうか? |
|
投稿日時: 2003-08-28 09:13
別ページにすると、できたSQL文を渡すのが面倒ですよ。まぁ、方法はちらほら出てきていますが。
未検証〜〜〜〜〜〜〜〜〜〜 private withevents listbox1 as System.Web.UI.WebControls.ListBox private withevents listbox2 as System.Web.UI.WebControls.ListBox private withevents button1 as System.Web.UI.WebControls.Button private withevents datagrid1 as System.Web.UI.WebControls.DataGrid ' listbox1には、表の一覧が表示されている ' listbox1で1つ選択すると、listbox2に、その表の列名一覧が表示される ' listbox2は複数選択可能 ' button1をクリックすると、listbox1で選択した表の、 ' listbox2で選択した列を取得する列を取得するSELECT文を作成する ' datagrid1に、作成したSELECT文の実行結果を表示する Private Sub Page_Load(...) Handles MyBase.Load listbox1.selectionmode = single listbox2.selectionmode = multiple end sub private sub listbox1_selectedindexchanged(...) handles listbox1.selectedindexchanged dim sql as string = string.format("SELECT * FROM {0}", listbox1.selecteditem.text) dim tbl as new datatable dim adpt as new oledb.oledbdataadapter(sql, ConnectionString) try adpt.fillschema(tbl) ' テーブル構成だけ集める listbox2.items.clear() dim i as integer for i = 0 to tbl.columns.count - 1 listbox2.items.add(tbl.columns(i).columnname) next finally adpt.dispose() tbl.dispose() end try end sub private sub button1_click(...) handles button1.click if listbox2.selectedindex < 0 then return dim cols as string = "" dim i as integer for i = 0 to listbox2.items.count - 1 if listbox2.items(i).selected then cols &= (", " & listbox2.items(i).text) end if next cols = cols.substring(2) ' 先頭に余分に", "があるので取る dim sql as string = "SELECT " & cols & " FROM " & listbox1.selecteditem.text DoSelect(sql) end sub private sub DoSelect(sql as string) dim dset as new dataset dim adpt as new oledb.oledbdataadapter(sql, ConnectionString) try adpt.fill(dset) datagrid1.datasource = dset datagrid1.datamember = dset.tables(0).tablename datagrid1.bind() finally adpt.dispose() dset.dispose() end try end sub |
|
投稿日時: 2003-08-28 09:34
Mickyでございます。
いつも勉強させていただいております。 引用: -------------------------------------------------------------------------------- esさんの書き込み (2003-08-27 22:47) より: DataTableへDataAdapter経由でFill()をするっていうのは、DataAdapter.Fill(DataSet)とは違うのでしょうか? -------------------------------------------------------------------------------- 的を外していたらゴメンナサイ DataSetは仮想のデータベースと理解しています。 DataSet:データベース DataTable:データベースに含まれるテーブル DataSetにFillするとDataSet内のDataTableコレクションの「0」番目 にデータが入ります。 複数のテーブルを返すストアドプロシージャを使ったりすると この限りではありませんが… 単に、ひとつだけのテーブルが対象ならDataTableにFillした方が リソースも少なくて済むんじゃないかな? 通常、そのページで必要なテーブルがひとつだけの場合はDataTable をひとつ用意したほうがコーディングも少なくて済むと思いますよ。(^^) |
|
投稿日時: 2003-08-31 09:41
Mickyさんありがとうございます。
なるほど、DataSetとDataTableがわかりました。 Jittaさん、いつもありがとうございます。 コードをみて、やってみます。 また何かあったときは、お願いします。 |