- PR -

[ASP+VS2005(VB)] GridViewにて選択列の取得を行いたい

1
投稿者投稿内容
thor
会議室デビュー日: 2006/11/28
投稿数: 8
投稿日時: 2008-01-25 10:51
thorと申します。

VS2005ProのASP.NET(VB)にて開発を行っているのですが、
教えて頂きたい事がありスレッドを立てさせて頂いた次第です。

現在、GridViewを作成し、1列目にcommandfieldを設置、
2列目にチェックボックスを設置しています。
3列目以降はDBからobjectsourceに取得した各項目をセットし表示を行っているのですが、
3列目以降を選択した場合とチェックボックスを選択した場合に、処理を分けたいのです。(3列目以降が選択された際には、別画面に遷移するようにしたいです)

「SelectedIndexChanging」イベント等で、選択された行を取得する
「selectedRow」というプロパティはあるのですが、
選択された列を取得できるプロパティは存在するのでしょうか。

知っている方おられましたらお教え頂けますよう
よろしくお願いいたします。


現在のソースの一部下に記します。
Protected Sub grv_xxxx_SelectedIndexChanging(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewSelectEventArgs) _
Handles grv_Detail.SelectedIndexChanging

Dim objGrv As GridView = CType(sender, GridView)
Dim igrvIndex As Integer = e.NewSelectedIndex

objGrv.EditIndex = igrvIndex
objGrv.DataBind()

Response.Redirect("xxxx.aspx", False)
End Sub

Protected Sub grv_xxxx_RowCreated(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
Handles grv_Detail.RowCreated
e.Row.Cells(0).Style.Add("display", "none")

If Not e.Row.RowType = DataControlRowType.DataRow Then
Exit Sub
End If

Dim clickEvent As String = _
String.Format("SelectedRow('{0}', '{1}')", _
e.Row.RowIndex, _
Me.grv_Detail.UniqueID)

e.Row.Attributes.Add("onClick", clickEvent)
e.Row.Style.Add("cursor", "hand")

End Sub
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-01-25 14:06
> 選択された列を取得できるプロパティは存在するのでしょうか。
GridViewには存在しません。

ご自身でGridView拡張版を作ることで実現は可能です。
(GridViewを継承したカスタムコントロールの作成)

選択列取得のポイントとしては
・__doPostbackにて選択行と選択列を渡す必要が有る
 (行選択のGridViewは「Select$選択行NO」の形式をした引数ですね)

・__doPostbackに独自形式の引数を渡すのですから
 GridViewのRaisePostBackEventメソッドをオーバーライドする必要が有る
 (カスタムコントロールを作成してオーバーライドする)
ってところでしょうか。

【タイプミス修正】
前:「Select&選択行NO」
後:「Select$選択行NO」

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-01-25 14:08 ]
THREE-ONE
会議室デビュー日: 2006/04/06
投稿数: 6
投稿日時: 2008-01-25 16:03
ちょっと泥臭いかもしれませんが。
SelectedRow という JavaScript の関数で行を選択状態にしているとお見受けした上での話です。
・ページに Hidden コントロールを配置。
・SelectedRow 関数を SelectedCell(rowIndex, columnIndex, uniqueId) のような関数に変更。(SelectedCell は columnIndex を 配置した Hidden の Value に格納する)
・SelectedCell 関数を e.Row.Cells の各 TableCell に対して出力。
そうすればポストバックの際に、Hidden コントロールの値から選択列のインデックスが取得できませんかね?

[ メッセージ編集済み 編集者: THREE-ONE 編集日時 2008-01-25 16:04 ]
1

スキルアップ/キャリアアップ(JOB@IT)