アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようにASP.NETにて、DataGridへデータをセットし表示したのですが、さらにヘッダーの項目名(名前、年齢)をハイパーリンクにし、クリックして別の詳細ページへ飛ぶなどの動作をさせたいと考えています。

いろいろ調べましたが、記述方法がわかりません。
どなたかアドバイスお願いします。

----------------------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
' DataGridへバインドする
If Not Me.IsPostBack Then
' 独自のDataAdapterを作成する
Dim da As New SqlDataAdapter( _
"SELECT fullname as 名前, age as 年齢 FROM person", _
Me.SqlConnection1)
Dim ds As New DataSet
' データ検索
da.Fill(ds)
' DataGridへバインド
Me.DataView1 = New DataView(ds.Tables(0))
Me.DataBind()
End If
End Sub

A 回答 (4件)

ANo.2です。



DataGridのItemDataBoundイベントで設定します。
下記のコードで項目名をハイパーリンクにできます。
また、「QNo.2555028 ASP.NET DataGridの項目数(列数)の取得」
の補足の回答も記します。

Protected Sub dgList_ItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) _
Handles dgList.ItemDataBound

' 行の種類を調べる。「ItemType」が「Header」の場合、
' ヘッダー行である。
If e.Item.ItemType = Header Then

' 各ヘッダー列にハイパーリンクを設定する。
e.Item.Cells(0).Text = "<a href='aaa.aspx'>名前</a>"
e.Item.Cells(1).Text = "<a href='bbb.aspx'>年齢</a>"

' DataGridの列数を知る。
Label1.Text = e.Item.Cells.Count

End If

End Sub
※ dgListはDataGridのID

この回答への補足

回答ありがとうございます!!

ご解答頂いてから、いろいろ試していたのですが、列は諸事情でプログラムで以下のように作成することになりました。BoundFieldにデータを入れる箇所はわかるのですが、TemplateFieldにデータを入れる箇所がどうしても、分かりません・・。
これを解決した上で、tasokarewaさんから教えていただいたANo.3の方法を試せばいいのでは・・とは思うのですが。

もし、よろしければ、何かヒントだけでも頂けないでしょうか?

--------------------------------
'Dim bf As BoundField = New BoundField
Dim bf As TemplateField = New TemplateField

For r = 0 To dTbl.Columns.Count - 1

'bf = New BoundField
bf = New TemplateField

bf.HeaderText = dTbl.Columns(r).Caption
'bf.DataField = dTbl.Columns(r).ColumnName
('↑のデータをテンプレートフィールドに入れる箇所が分かりません)

Me.GridView1.Columns.Add(bf)

Next
--------------------------------

補足日時:2006/12/07 14:22
    • good
    • 0
この回答へのお礼

追加ですが、DataGridからGridViewに変更しました・・。

お礼日時:2006/12/07 14:44

ANo3です。


> 追加ですが、DataGridからGridViewに変更しました・・。
VS2005だったのですね。

頂いたサンプルのようにコードでTemplateFieldとDataColumnをマッピングさせることはできません(不可能ではありませんが、やめておいたほうがよいです)。TemplateFieldはデザイナを使用されるほうがよいです。
CheckBox や HyperLink でよいのであれば、それぞれ、CheckBoxField・HyperLinkFieldが用意されております。
それらのクラスはBoundFieldを継承しておりますので、
BoundFieldと同じように使用できます。

それ以外では、GridViewを使用されるとのことですので、
列を追加した上で、RowDataBoundイベントかDataBoundイベント
もしくはバインド後に、
DataRowから値を取得・表示されるのがよいです。
    • good
    • 0
この回答へのお礼

丁寧なご教授ありがとうございます。

ANo.3を引用させて頂き、先ほどなんとかそれっぽいものを作成することができました。

>頂いたサンプルのようにコードでTemplateFieldとDataColumnをマッピングさせることはできません(不可能ではありませんが、やめておいたほうがよいです)。TemplateFieldはデザイナを使用されるほうがよいです。

今までかなりごちゃごちゃ試しましたが、上記の言葉で諦めが付き、他の方法で作成することができました。(※いろんなサンプルコードを見ていると、DataGridが多いので、なんで自分の(VS2005)には付いてないんだろうと思いつつも、無理やりDataGridを使っていました。ものすごくやりづらかったです・・)

本当にありがとうございました!!!

お礼日時:2006/12/08 16:37

DataGridのテンプレートを使用します。


デザイナを使用して下さい。
例えば、項目にテキストボックスなどを表示させたいときは、
「ItemTemplate」を使用するのと同じように、
ヘッダーにハイパーリンクを表示させたいときは、
「HeaderTemplate」を使用します。

この回答への補足

できました!そうです。これです。やりたかったのは・・・。
ありがとうございます。

ただ、なに分Columnsを自動で作成しているので、aspx.vbでの記述法が知りたいです。
Me.DataGrid1.Columns.xxxxx(←ココが不明)のようになるのではと思いますが・・。
もし、ご存知でしたら、教えていただけないでしょうか?

補足日時:2006/11/27 09:22
    • good
    • 0

項目名のところは、よくわかりませんが、


DataGridの上で右クリック→プロパティビルダ→列のところでハイパーリンクを設定します。

「ヘッダーの項目名をハイパーリンクにする」のは、
普通、ソートさせるのに使用すると思うのですが。。
    • good
    • 0
この回答へのお礼

うーん、ソート以外に利用したいのです・・・。

お礼日時:2006/11/25 16:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています